gperftools 使用經驗總結


先看了網上的一些資料,但都不太適合我。還是看了詳細的資料才學會怎么用。

按照 http://www.cnblogs.com/persistentsnail/p/3294843.html,yum安裝gperftools-devel 和 libunwind

安裝gperftools-devel的時候,同時就安裝了 gperftools。如何使用,主要參考了 https://wiki.geany.org/howtos/profiling/gperftools,才入的門,回頭再看第一個鏈接,很多地方就能看懂了。

對第二個鏈接,我的libprofile.so是裝到/usr/lib64下的,必須要執行:
LD_PRELOAD=/usr/lib64/libprofiler.so CPUPROFILE=/tmp/geany.prof geany, 忽略 LD_PRELOAD是不行的。(有的參考資料不需要這個,這有待將來驗證)
看分析結果:

pprof --web /usr/bin/geany /tmp/geany.prof

里面同時提到可以不從一開始就做性能分析,

LD_PRELOAD=/usr/lib64/libprofiler.so CPUPROFILE=/tmp/geany.prof CPUPROFILESIGNAL=12 geany

想要做分析的時候,發送信號: killall -12 geany

想停止分析,同樣發信號: killall -12 geany

最后看分析結果: pprof --web /usr/local/bin/geany /tmp/geany.prof.0

注意最后有個0。 

本來帶打算對自己的模塊:加入 http://blog.csdn.net/zougangx/article/details/8836749 提到的方法,對特定的程序塊做分析,因為要盡快提交一版,先擱置這個實踐。但是把其中的關鍵內容拷貝在下面:

2.設置要分析的程序塊

    –1)使用ProfilerStart("CPUProfile"),ProfilerStop() (需要包含頭文件google/profiler.h)
    –2)如果不設定程序塊,需要設置環境變量CPUProfile

注:CPUProfile為生成的結果數據文件的文件名

3.編譯和運行

    g++ -o test test.cpp -lprofiler

./test

4.將運行結果CPUProfile轉化成pdf格式的文件

    pprof –pdf ./test CPUProfile > test.pdf

 

二.使用過程中可能出現的問題:

1.運行時出現:No nodes to print

程序邏輯使用CPU次數太少,無法分析

2.程序core dump

循環次數過多(原因不確定)

3.運行進出現:SIGPROF handler is already in use

使用了其它的性能分析工具如:gprof等,造成沖突

 總結一下,最全,也比較有價值的文檔是 http://www.cnblogs.com/lenolix/archive/2010/12/13/1904868.html, 但它不太適合初學者。

可以通過功能擴展可以實現在運行中間階段或通過http協議遠程控制profiler信息的功能。gperftools-httpd項目就已經初步完成了這個功能,我們可以體驗一下。

從http://code.google.com/p/gperftools-httpd/下載gperftools-httpd安裝。

說是可以編譯,但實際從google根本下不到這個,只能從github上下載,雖然有多個gperftools-httpd,點擊后發現,都是同一家公司放上去的。編譯時,說 -lstacktrace失敗。到gperftools源碼中看,對.o鏈接,讓其生成libstacktrace.so,提示錯誤。於是,對gperftools編譯過程做記錄, make|tee make.out,然后分析make.out和Makefile.am,對stacktrace.so涉及到的3個文件,分別單獨編譯。

g++ -DHAVE_CONFIG_H -I. -I./src -I./src -DNO_TCMALLOC_SAMPLES -pthread -DNDEBUG -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-cfree -fno-builtin-memalign -fno-builtin-posix_memalign -fno-builtin-valloc -fno-builtin-pvalloc -DNO_FRAME_POINTER -g -O2 -MD -MP -c src/base/vdso_support.cc  -fPIC -o ../vdso_support.o

..., 把3個.o移到某個目錄中<dir> 最后,g++ <dir>.o -shared -o libstacktrace.so

為了編譯不出問題,還需要對gperftools-httpd.h做修改,加上extern "C" ...

extern "C" {
extern void ghttpd(void);
}

同時介紹的Intel公司的vtune,帶圖形界面,很好用,不過需要license。

一些例子程序可以不用自己編了,http://bitjoy.net/2017/02/07/gperftools-tutorial/提到的git上的代碼 https://github.com/01joy/TestGperftools,可以拿過來驗證一把。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM