1. 程式人生 > >gperftools工具檢測記憶體洩露

gperftools工具檢測記憶體洩露

gperftools是google開發的一款非常實用的工具集,主要包括:效能優異的malloc free記憶體分配器tcmalloc;基於tcmalloc的堆記憶體檢測和記憶體洩漏分析工具heap-profiler,heap-checker;基於tcmalloc實現的程式CPU效能監測工具cpu-profiler.

上述所說的三種工具在我們伺服器程序的效能分析監控,定位記憶體洩漏,尋找效能熱點,提高malloc free記憶體分配效能的各個方面上都有非常成功的使用經驗.

使用heap-checker來檢測記憶體洩露,參考gperftools/docs/heap_checker.html文件。

檢測的方式有兩種,一種是需要把tcmalloc庫編譯進工程,另一種不需要編譯進工程,只需要在執行時通過LD_PRELOAD命令載入tcmalloc庫。官方推薦第一種方法,第二種方式存在安全問題。

第一種方式,在makefile檔案中編譯進tcmalloc庫,執行如下命令

env PPROF_PATH=./objs/pprof HEAPCHECK=normal ./application

第二種方法,

envLD_PRELOAD="/home/zhengbin/gperf/lib/libtcmalloc.so" PPROF_PATH=../../gperf/bin/pprof HEAPCHECK=normal ./application

PPROF_PATH為檢測工具路徑,application為可執行程式

本文檢測的是服務程式整個程式的記憶體洩露情況,檢測工具會在程式退出時檢測,因此需要程式從main函式中正常退出,


在程式中增加中斷訊號處理函式保證程式正常退出,列印檢測結果:

CTRL+C 或者傳送SIGINT訊號給程式.

下圖所示檢測結果中,顯示有三處記憶體洩露,並且有函式堆疊資訊。通過執行提示中的命令可以檢視更heap檔案中詳細的資訊,--gv去掉,進入命令後執行top命令。