gperftools檢查內存泄露/越界等問題的簡易說明

大名鼎鼎的Google的內存檢查工具

1 編譯gperftools

本身庫的編譯沒啥好說的,標準流程,需要automake支持

./autogen.sh
./configure
make && make install

2 編譯應用程序

在實際工程的Makefile中添加LIB庫依賴.
一般來說 -ltcmalloc就可以了
如果需要使用Profiler的功能,那麼用 -ltcmalloc_and_profiler
如果需要檢查數組越界等,那麼需要用 -ltcmalloc_debug(會大大降低處理速度)

3 運行程序獲取快照

  1. 啓動前設置以下環境變量
CPUPROFILE=分析結果路徑,建議完整路徑
#即SIGUSR2,如果想要SIGUSR1那就10
CPURPOFILESIGNAL=12
  1. 在需要捕獲一次快照時, 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("");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章