【问题标题】:massif reported heap usage much less than VmRss, what could be wrong?massif 报告的堆使用量比 VmRss 少得多,这可能是什么问题?
【发布时间】:2018-07-07 02:54:29
【问题描述】:

地块输出:

time=3220706
mem_heap_B=393242041
mem_heap_extra_B=73912175
mem_stacks_B=93616
heap_tree=peak

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

【问题讨论】:

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


    【解决方案1】:

    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 选项,通过手动指定所有“自定义”内存分配函数,它可以让您更接近估计实际内存使用情况。

    【讨论】:

      【解决方案2】:

      Valgrind 可以将大量内存用于自己的内部管理。因此,massif 报告的内存明显小于进程大小是正常的,因为进程大小包括“客户端/访客”内存 + valgrind 自己的内存。

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

      【讨论】:

        猜你喜欢
        • 2011-12-18
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多