gperftool 檢測內存泄漏

實戰

1、程序編譯帶tcmolloc
2、啓動程序

env HEAPPROFILE="/tmp/perf/test_server.perf" HEAP_PROFILE_ALLOCATION_INTERVAL=102400000 HEAPCHECK=strict  test_server

HEAP_PROFILE_ALLOCATION_INTERVAL累計分配內存多少以後進行dump perf文件

HEAP_PROFILE_TIME_INTERVAL 內存
3、使用pperf分析

./pprof test_server test_server.pef --inuse_objects --lines --heapcheck  --edgefraction=1e-10 --nodefraction=1e-10  --pdf > test_server.pdf

用法

首先需要把tcmalloc鏈接到我們需要分析的程序中, 當然我們也可以動態load 這個lib,但是爲了簡單起見,還是推薦大家鏈接這個lib到自己的程序中。

鏈接之後,我們接下來的任務就是得到內存分析的dump文件,我們有兩種方法:

 1.    靜態dump方法:

     直接定義一個環境變量HEAPPROFILE 來指定dump profile文件的位置,如:/tmp/test.log,它將會在/tmp/目錄下生成很多類似/tmp/test.log.0003.heap文件名的文件

     env HEAPPROFILE="/tmp/test.log" /test/testprog

 2.    動態dump方法:

我們可以調用Google Heap Profiler的API來控制什麼時候dump出內存的profiler文件,這樣更加靈活,爲此,我們必須包含heap-profiler.h這個頭文件。

HeapProfilerStart() 用來開始內存分析

HeapProfilerStop(). 用來終止內存分析

這樣就只會在開始和結束之間產生dump profiler文件。

選項

HEAP_PROFILE_ALLOCATION_INTERVAL
程序內存每增長這一數值之後就dump 一次內存,默認是1G (1073741824)

HEAP_PROFILE_INUSE_INTERVAL
程序如果一次性分配內存超過這個數值dump 默認是100K, 待驗證

查看內存dump文件

這麼dump文件生成之後,我們接下來就可以查看內存的分佈情況,如:

pprof --pdf /test/testProg /tmp/test.log.0001.heap

就是以pdf的形式來顯示這個dump文件,當然我們也可以使用其他的格式來顯示。

–text Generate text report
–callgrind Generate callgrind format to stdout
–gv Generate Postscript and display
–evince Generate PDF and display
–web Generate SVG and display
–list= Generate source listing of matching routines
–disasm= Generate disassembly of matching routines
–symbols Print demangled symbol names found at given addresses
–dot Generate DOT file to stdout
–ps Generate Postcript to stdout
–pdf Generate PDF to stdout
–svg Generate SVG to stdout
–gif Generate GIF to stdout
–raw Generate symbolized pprof data (useful with remote fetch)

這就是所有可支持的格式。

注:如果pprof 運行出錯,請檢查時候已經正確安裝,如果出現sh: dot: command not found 這個錯誤,就是需要安裝yum install graphviz -y

我們也可以專門focus在一些包含某些關鍵字的路徑上,也可以忽略相關的路徑

–focus

–ignore

pprof --pdf --focus=CData /test/testProg /tmp/test.log.0001.heap

比較dump文件

爲了知道在某一段時間內的內存分佈情況,或者需要了解某段時間內有沒有內存泄露,我們就需要用到diff我們的dump文件

例如:pprof --pdf --base /tmp/test.log.0001.heap /test/testProg /tmp/test.log.0101.heap

比較了第一個dump文件與第101個文件的差異,而且結果以pdf的形式顯示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章