大名鼎鼎的Google的內存檢查工具
1 編譯gperftools
本身庫的編譯沒啥好說的,標準流程,需要automake支持
./autogen.sh
./configure
make && make install
2 編譯應用程序
在實際工程的Makefile中添加LIB庫依賴.
一般來說 -ltcmalloc就可以了
如果需要使用Profiler的功能,那麼用 -ltcmalloc_and_profiler
如果需要檢查數組越界等,那麼需要用 -ltcmalloc_debug(會大大降低處理速度)
3 運行程序獲取快照
- 啓動前設置以下環境變量
CPUPROFILE=分析結果路徑,建議完整路徑
#即SIGUSR2,如果想要SIGUSR1那就10
CPURPOFILESIGNAL=12
- 在需要捕獲一次快照時, kill -s 12 pid
此時在你的設定目錄下,會生成一次快照。文件名爲CPUPROFILE+".0001",數字遞增
- 請務必保證SIGPROF信號不被捕獲,否則會影響正常運行
- 你設定的快照觸發的信號量,同樣也不能被捕獲
4 對比快照
建議安裝graphviz(需要dot這個命令),可以支持導出成PDF,形成一個新增/減少元素的調用關係圖。
pprof --pdf --base=<老的一次HEAP> <程序名> <新的HEAP> > result.pdf
可以增加參數 --lines 詳細到行。
5 高階使用
在某些時候,因爲信號量被劫持,或希望在某個事務完成後,通過程序觸發一次快照的生成,可以如下操作
#include <heap-profiler.h>
if (IsHeapProfilerRunning() == 0)
HeapProfilerStart("myheap");
HeapProfilerDump("");