先看了網上的一些資料,但都不太適合我。還是看了詳細的資料才學會怎么用。
按照 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.設置要分析的程序塊
注:CPUProfile為生成的結果數據文件的文件名
3.編譯和運行
./test
4.將運行結果CPUProfile轉化成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,可以拿過來驗證一把。
