我希望看到command的峰值内存使用情况。我有一个参数化的算法,我想知道程序何时会崩溃,因为我的机器上内存不足(12 to )。
我试过:
/usr/bin/time -f "%M" command
valgrind --tool=massif command第一个给了我1414168 (1.4GB;感谢ks1322指出它是以KB!)勇敢的给了我
$ 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我有点搞不懂我应该取哪个数字,但是让我们假设“总计”(22‘s)。
massif-visualizer告诉我

现在,对于同一个命令,我有3个不同的数字:
valgrind --tool=massif command + ms_print:22MBvalgrind --tool=massif command + massif-visualizer:206‘m(这是我在htop中看到的,我猜这就是我感兴趣的in)time -f "%M" command:1.4GB我应该看哪个号码?为什么数字是不同的呢?
发布于 2019-09-25 20:31:06
/usr/bin/time -f "%M"测量最大的RSS (驻留集大小),即内存中的进程使用的内存,而不是交换出来的内存。此内存包括堆、堆栈、数据段等。
这测量子进程(包括孙辈)的最大RSS值(而不是子代RSS之和的最大值)。
valgrind --tool=massif,如文档所述:
只测量堆内存,即分配给malloc、calloc、realloc、memalign、new、new[]和其他几个类似函数的内存。这意味着它不直接测量使用较低级别的系统调用(如mmap、mremap和brk )分配的内存。
这只测量孩子(而不是孙子)的记忆。这并不测量堆栈,也不测量文本和数据段。
(像--pages-as-heap=yes和--stacks=yes这样的选项可以进行更多的测量)
所以在你的例子中,区别是:
time考虑到孙辈,而valgrind不度量交换的内存,而valgrind doestime测量堆栈和数据段,valgrind不测量你现在应该:
检查是否有一些子级负责内存consumption
valgrind --tool=massif --stacks=yes检查堆栈
valgrind --tool=massif --pages-as-heap=yes一起分析以检查内存使用情况的其余部分
https://stackoverflow.com/questions/57973895
复制相似问题