massif报告堆使用量远低于VmRss,可能出错?

时间:2017-09-09 09:42:12

标签: linux memory-leaks valgrind memory-fragmentation massif

地块输出:

at_firstname

进程在VmRss中显示1.2GB,所以巨大的差异来自于哪里? (我看到Rss不断成长。)

2 个答案:

答案 0 :(得分:0)

Valgrind可以使用大量内存来保存内部。因此,由于流程大小包括“客户端/访客”内存+ valgrind自己的内存,所以将massif报告内存显着小于流程大小是正常的。

您可以使用valgrind选项--stats = yes来获取有关客户端使用的内存与valgrind使用的内存的更多信息。

答案 1 :(得分:0)

http://cs.swan.ac.uk/~csoliver/ok-sat-library/internet_html/doc/doc/Valgrind/3.8.1/html/ms-manual.html

  

堆分配功能(例如malloc)建立在这些系统调用之上。例如,在需要时,分配器通常会调用mmap来分配大量内存,然后响应对malloc等的调用,将该内存块的一部分移交给客户端程序。 Massif仅直接测量这些较高级别的malloc等调用,而不测量较低级别的系统调用。

无法根据massif输出来保证RSS大小。使用--pages-as-heap=yes选项,您也许可以估计VIRT的大小,但这包括映射到内存中的所有内容,而不必驻留在RAM中。

您可能想使用alloc-fn选项,通过手动指定所有“自定义”内存分配功能,可以使您更接近估计实际内存使用情况。