Saturday, November 19, 2011

[程式心得]如何找到Memory Leak, (簡介Google Heap Leak Checker)

這次為了找Memory Leak用了各種工具,發現了這超好用的工具。

Google Heap Checker

http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html

使用方法很簡單, 只要在compiler程式的時候增加 -ltcmalloc 的參數就可以了。
不過我是在Ubuntu上面使用 遇到一些使用上的小問題。順便解說一下


首先在Ubuntu 可以用 sudo apt-get install google-perftool 來安裝
但是安裝完之後會少一個symbolic link
所以需要先



$ sudo ln -s /usr/lib/libtcmalloc.so.0 /usr/lib/libtcmalloc.so.0

他有多種使用方法,我只介紹我用到的方法 
 
dump heap然後比較heap的差異
 
其他有興趣的可以自行google

要執行程式的時候

$ HEAPPROFILE=/tmp/heapfile ./my-program 
 
這樣會每隔一段時間你的heap 有變化的的時候 會dump到 
/tmp/heapfile.0001.heap

/tmp/heapfile.0002.heap
/tmp/heapfile.0003.heap
/tmp/heapfile.0004.heap
 
這樣就可以比較兩個不同時間點的heap 
比較的工具是 pprof
 
但是Ubuntu裡面有另外一個叫做 pprof的工具 
所以在Ubuntu裡面改名為 google-pprof ,別用錯了
 

想看heap內容的時候可以

$ google-pprof --gv /path/to/my-program /tmp/heapfile.0001.heap
 
要比較兩個heap差別時 
 
$ google-pprof --gv --base=/tmp/heapfile.0001.heap /path/to/my-program /tmp/heapfile.0003.heap
 
圖的長相可以看這邊http://goog-perftools.sourceforge.net/doc/heap_profiler.html
有整個call graph,還會把差越多的block畫的越大塊。
非常好用,我就是用這個找到一個小小的leak。


希望對大家以後跟memory leak奮戰可以很快結束。

順便說,另外一個同系列的performance profile也很好用喔

No comments: