我知道Valgrind,但它只是檢測內存管理問題。我所搜索的是一個工具,它給了我一個概述,我的程序的哪些部分會消耗多少內存。用例如圖形表示一個樹形圖(就像KCachegrind爲Callgrind所做的那樣)會很酷。如何分析內存使用情況?
我正在一臺Linux機器上工作,所以windows工具對我無能爲力。
我知道Valgrind,但它只是檢測內存管理問題。我所搜索的是一個工具,它給了我一個概述,我的程序的哪些部分會消耗多少內存。用例如圖形表示一個樹形圖(就像KCachegrind爲Callgrind所做的那樣)會很酷。如何分析內存使用情況?
我正在一臺Linux機器上工作,所以windows工具對我無能爲力。
使用massif,它是Valgrind工具的一部分。 massif-visualizer可以幫助您繪製數據圖表,或者您可以使用ms_print
命令。
嘗試使用gperftools由Google提供的heap profiler。我一直都是從源頭上構建它的,但它在幾個Linux發行版下作爲precompiled package提供。
這與將動態庫鏈接到可執行文件並運行該程序一樣簡單。它(據我見過的)收集關於每個動態內存分配的信息,並保存到磁盤每次出現以下情況之一一內存轉儲:
HEAP_PROFILE_ALLOCATION_INTERVAL
字節已被該程序分配(默認:1GB)HEAP_PROFILE_INUSE_INTERVAL
字節(默認值增加:100兆)HEAP_PROFILE_TIME_INTERVAL
秒後(默認:激活)HeapProfilerDump()
從您的代碼最後一個,在我的經驗,是最有用的,因爲你可以控制什麼時候有堆使用的快照,然後比較兩個不同的快照,看看有什麼不對。
最終,有幾個可能的輸出格式,比如文本或圖形(在一個有向圖的形式):
使用該工具我已經能夠發現不正確存儲器使用量即我找不到使用Massif。
謝謝,截圖看起來非常棒...,我想這就是我一直想要的。 – math 2011-01-14 12:45:29