gpt4 book ai didi

memory - 'time -f "%M "' and ' valgrind --tool=massif' 之间有什么区别?

转载 作者:行者123 更新时间:2023-12-04 14:18:13 24 4
gpt4 key购买 nike

我想查看命令 的内存使用峰值。我有一个参数化算法,我想知道程序何时会因我的机器(12GB RAM)内存不足错误而崩溃。

我试过:

/usr/bin/time -f "%M" command
valgrind --tool=massif command

第一个给了我 1414168(1.4GB;谢谢 ks1322 指出它以 KB 为单位!)然后 valgrind 给了我

$ ms_print massif.out
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
75 26,935,731,596 22,420,728 21,956,875 463,853 0

我有点不知道应该取哪个数字,但我们假设“总计”(22MB)。

massif-visualizer 向我显示

enter image description here

现在我对同一个命令有 3 个不同的数字:

  • valgrind --tool=massif 命令 + ms_print:22MB
  • valgrind --tool=massif command + massif-visualizer:206MB(这是我在 htop 中看到的,我想这是我感兴趣的)
  • time -f "%M"命令:1.4GB

我应该看哪个数字?为什么数字完全不同?

最佳答案

/usr/bin/time -f "%M" 测量最大 RSS(驻留集大小),即 RAM 中进程使用的内存,未换出。该内存包括堆、栈、数据段等。

这测量了子进程(包括孙子进程)的最大 RSS(不是子进程 RSS 总和的最大值)。

valgrind --tool=massif,如文档所述:

measures only heap memory, i.e. memory allocated with malloc, calloc, realloc, memalign, new, new[], and a few other, similar functions. This means it does not directly measure memory allocated with lower-level system calls such as mmap, mremap, and brk

这只测量 child (不是孙子)的内存。这不会测量堆栈,也不会测量文本和数据段。

(选项如 --pages-as-heap=yes--stacks=yes 可以测量更多)

因此在您的情况下,差异是:

  • time 考虑了孙子,而 valgrind 没有
  • time 不测量换出的内存,而 valgrind 测量
  • time 测量堆栈和数据段,而 valgrind 不测量

你现在应该:

  • 检查是否有一些 child 对内存消耗负责
  • 尝试使用 valgrind --tool=massif --stacks=yes 进行分析以检查堆栈
  • 尝试使用 valgrind --tool=massif --pages-as-heap=yes 进行分析以检查剩余的内存使用情况

关于memory - 'time -f "%M "' and ' valgrind --tool=massif' 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57973895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com