2011-01-14 143 views
20

我知道Valgrind,但它只是檢測內存管理問題。我所搜索的是一個工具,它給了我一個概述,我的程序的哪些部分會消耗多少內存。用例如圖形表示一個樹形圖(就像KCachegrind爲Callgrind所做的那樣)會很酷。如何分析內存使用情況?

我正在一臺Linux機器上工作,所以windows工具對我無能爲力。

回答

20

使用massif,它是Valgrind工具的一部分。 massif-visualizer可以幫助您繪製數據圖表,或者您可以使用ms_print命令。

+0

謝謝,截圖看起來非常棒...,我想這就是我一直想要的。 – math 2011-01-14 12:45:29

4

嘗試使用gperftools由Google提供的heap profiler。我一直都是從源頭上構建它的,但它在幾個Linux發行版下作爲precompiled package提供。

這與將動態庫鏈接到可執行文件並運行該程序一樣簡單。它(據我見過的)收集關於每個動態內存分配的信息,並保存到磁盤每次出現以下情況之一一內存轉儲

  • HEAP_PROFILE_ALLOCATION_INTERVAL字節已被該程序分配(默認:1GB)
  • 高水位的內存使用情況標誌由HEAP_PROFILE_INUSE_INTERVAL字節(默認值增加:100兆)
  • HEAP_PROFILE_TIME_INTERVAL秒後(默認:激活)
  • 你顯式調用HeapProfilerDump()從您的代碼

最後一個,在我的經驗,是最有用的,因爲你可以控制什麼時候有堆使用的快照,然後比較兩個不同的快照,看看有什麼不對。

最終,有幾個可能的輸出格式,比如文本或圖形(在一個有向圖的形式):

Graph of memory usage

使用該工具我已經能夠發現不正確存儲器使用量即我找不到使用Massif。