2016-10-05 50 views
0

我有一個服務器上的進程。我的進程使用共享庫,運行在linux後臺。我在gperftool中使用CPU分析器來檢查函數。的步驟是以下:谷歌性能工具(gperftools)上的CPU分析器 - 與沒有輸出問題的共享庫進程

1.在我的應用程序,

main() 
{ 
    ProfilerStart("dump.txt"); 
    ...code.. 
    ProfilerFlush(); 
    ProfilerStop(); 
return 0; 
} 

2. CPUPROFILE_FREQUENCY = 1000000 LD_LIBRARY_PATH =的/ usr /本地/ LIB/libprofiler.so CPUPROFILE = dump.txt ./ a.out的

pprof --text的a.out dump.txt

我檢查我的其他操作(不使用共享的李b),沒關係。

問題:的dump.txt文件只是保持不變的文件大小(8KB或9KB),不能顯示輸出儘管在2或3小時的運轉時間長(該應用從客戶端接收消息)。我認爲,因爲我的應用程序使用共享庫,這裏有一些錯誤,完全不清楚這一點。

你能告訴我發生了什麼事嗎?任何解決方案

非常感謝,

回答

0

部分LD_LIBRARY_PATH=/usr/local/lib/libprofiler.so是運行中的不正確。

根據文檔http://goog-perftools.sourceforge.net/doc/cpu_profiler.html

到了CPU分析器安裝到你的可執行文件,爲您的可執行文件的鏈接,時間步驟中添加-lprofiler。 (這可能也是可以使用LD_PRELOAD在運行時剖析增加,但是這不一定是推薦。)

您可以添加libprofiler像

gcc -c myapp.c -o myapp.o 
gcc myapp.o mystaticlib.a -Lmypath -lmydynamiclib -lprofiler -o myapp 
聯步驟爲您的應用程序的 -lprofiler

或與環境變量LD_PRELOAD添加它(不LD_LIBARY_PATH像你一樣):

LD_PRELOAD=/usr/lib/libprofiler.so ./myapp 

當gperftools的CPU分析器的正確使用d,當應用程序終止時,它將打印有關事件計數和輸出文件大小的信息。