比较valgrind,massif,top和pmap

时间:2014-09-19 05:09:40

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

我试图了解我的申请是否泄露。

运行我的应用程序时,我会定期运行pmap并观察:

mapped: 488256K    writeable/private: 90144K    shared: 0K
mapped: 488260K    writeable/private: 101912K    shared: 0K
mapped: 488256K    writeable/private: 102708K    shared: 0K
mapped: 488260K    writeable/private: 105112K    shared: 0K

我运行top并观察:

VIRT    RES     SHR
488260  17684   3020
488256  20060   3032
488256  22700   3032
488256  26132   3032
488256  28772   3032
488256  31880   3032

" RES"并且在"可写/私人"是什么让我怀疑泄漏。但是,运行valgrind我没有检测到任何重大泄漏,当我一直中止执行时 看到大约20Mb可达内存:

==19998== 
==19998== HEAP SUMMARY:
==19998==     in use at exit: 20,351,513 bytes in 974 blocks
==19998==   total heap usage: 329,404 allocs, 328,430 frees, 34,562,346 bytes allocated
==19998== 
==19998== LEAK SUMMARY:
==19998==    definitely lost: 63 bytes in 4 blocks
==19998==    indirectly lost: 0 bytes in 0 blocks
==19998==      possibly lost: 4,679 bytes in 76 blocks
==19998==    still reachable: 20,346,771 bytes in 894 blocks
==19998==         suppressed: 0 bytes in 0 blocks
==19998== Rerun with --leak-check=full to see details of leaked memory
==19998== 
==19998== For counts of detected and suppressed errors, rerun with: -v
==19998== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

我运行valgrind --tool=massif并看到20Mb flat:

massif visualisation

问题:有人可以解释为什么valgrind和massif告诉我,我的程序一直使用20Mb内存,但top和pmap告诉我使用率在增长吗?

1 个答案:

答案 0 :(得分:1)

为了理解为什么顶级节目会为您的流程增加,您还需要使用valgrind --pages-as-heap=yes分析程序中的内存分配。你会明白为什么会增加。它是top测量进程内存消耗的方式。 http://valgrind.org/docs/manual/ms-manual.html#ms-manual.not-measured。使用valgrind --pages-as-heap=yes,您将看到在您的程序中完成这些分配的位置