比较valgrind,地块,顶部和pmap
问题描述:
我想了解我的应用程序是否泄漏。比较valgrind,地块,顶部和pmap
当运行我的应用程序,我定期运行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的平:
问题:有人可以解释为什么valgrind和massif告诉我,我的程序一直使用20Mb内存,但top和pmap告诉我用法正在增长吗?
答
为了理解为什么*展示会增加您的流程,您还需要分析程序中的内存分配,使用valgrind --pages-as-heap=yes
。你会明白为什么会有增加。这是顶端测量进程内存消耗的方式。 http://valgrind.org/docs/manual/ms-manual.html#ms-manual.not-measured。和valgrind --pages-as-heap=yes
你会看到这些分配在你的程序中的位置
为了理解为什么'top'显示增加,你还需要用'valgrind --pages-as-heap = yes'来分析程序中的内存分配。 。你会明白为什么会有增加。这是'顶部'测量进程内存消耗的方式。 http://valgrind.org/docs/manual/ms-manual.html#ms-manual.not-measured。并且用'valgrind --pages-as-heap = yes',你会看到在你的程序中这些分配是在哪里完成的。 – 2014-09-19 05:15:45
感谢哥们,太棒了。至少现在我可以获得地块显示增加..现在我只需要弄清楚如何在我的代码中追踪它。 – jsj 2014-09-19 05:24:54