XHprof 使用 (轉)

原文地址:http://blog.csdn.net/maitiandaozi/article/details/8896293php

 

XHProf是facebook開源出來的一個php輕量級的性能分析工具,跟Xdebug相似,但性能開銷更低,還能夠用在生產環境中,也能夠由程序開 關來控制是否進行profile。html

1.安裝XHprof

 

[plain]  view plain  copy
 
 print?
  1. wget http://pecl.php.net/get/xhprof-0.9.2.tgz  
  2. tar zxf xhprof-0.9.2.tgz  
  3. cd xhprof-0.9.2  
  4. cp -r xhprof_html xhprof_lib /你的web目錄路徑/xhprof/  (此處目的是創建數據分析目錄,可將此目錄配置成虛擬主機訪問)  
  5. cd extension/  
  6. /usr/local/webserver/php/bin/phpize  
  7. ./configure  –with-php-config=/usr/local/webserver/php/bin/php-config   (php-config的路徑)  
  8. make && make install  

安裝完提示:
Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20060613/web

 

 

2.php.ini中添加

extension_dir = "/usr/lib/php5/20090626/"
這句我原來就有了,就這用添加下面兩句
extension=xhprof.so
xhprof.output_dir=/www/logs/xhprof

分析日誌輸出在/www/logs/xhprof目錄。服務器

 

3.重啓Nginx服務器和php,打開phpinfo()頁面即可以看到看到輸出中有了xhprof信息。

[plain]  view plain  copy
 
 print?
  1. xhprof  0.9.2  
  2. CPU num  2  

4.安裝libpng包

不然會由於dot 不支持PNG,不能顯示圖表數據分析,且 出現Error: either we can not find profile data for run_id 4d7f0bd99a12f or the threshold 0.01 is too small or you do not have ‘dot’ image generation utility installed.的錯誤函數

 

[plain]  view plain  copy
 
 print?
  1. wget http://nchc.dl.sourceforge.net/project/libpng/libpng15/1.5.1/libpng-1.5.1.tar.gz  //若是不可用,能夠在網上找一個下下來再編譯安裝  
  2. tar zxf libpng-1.5.1.tar.gz    
  3. cd libpng-1.5.1    
  4. ./configure    
  5. make    
  6. make install    

 

 

5.安裝graphviz,一個畫圖工具

[plain]  view plain  copy
 
 print?
  1. wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz  
  2. tar zxf graphviz-2.24.0.tar.gz  
  3. cd graphviz-2.24.0  
  4. ./configure--with-png=yes  
  5. make && make install  

6.使用方法:

 

[plain]  view plain  copy
 
 print?
  1. 頭部:  
  2. xhprof_enable();   
  3. //xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不記錄內置的函數  
  4. //xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);  同時分析CPU和Mem的開銷  
  5. $xhprof_on = true;  
  6.   
  7. 生產環境可以使用:  
  8. if (mt_rand(1, 10000) == 1) {  
  9.    xhprof_enable();  
  10.    $xhprof_on = true;  
  11. }  
  12.   
  13. 尾部:  
  14. if($xhprof_on){  
  15. $xhprof_data = xhprof_disable();  
  16. $xhprof_root = '/www/<span style="font-family: Arial, Helvetica, sans-serif;">(xhprof的虛擬主機目錄)</span>/';  
  17. include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php";   
  18. include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php";   
  19. $xhprof_runs = new XHProfRuns_Default();   
  20. $run_id = $xhprof_runs->save_run($xhprof_data, "hx");  
  21. echo '<a href="http://(xhprof的虛擬主機域名)/xhprof_html/index.php?run='.$run_id.'&source=hx" target="_blank">統計</a>';  
  22. }  
  23.   
  24. 運行程序,底部出現統計字樣,點過去就能夠看到性能分析了。按運行時間排序,很容易找出化時間最長的函數。  
  25. 點[View Full Callgraph]圖形化顯示,最大的性能問題會用紅色標出,其次是黃色。  


附運行結果裏的名次解釋:工具

[plain]  view plain  copy
 
 print?
    1. Function Name 函數名  
    2. Calls 調用次數  
    3. Calls% 調用百分比  
    4. Incl. Wall Time (microsec) 調用的包括子函數全部花費時間 以微秒算(一百萬分之一秒)  
    5. IWall% 調用的包括子函數全部花費時間的百分比  
    6. Excl. Wall Time (microsec) 函數執行自己花費的時間,不包括子樹執行時間,以微秒算(一百萬分之一秒)  
    7. EWall% 函數執行自己花費的時間的百分比,不包括子樹執行時間  
    8. Incl. CPU(microsecs) 調用的包括子函數全部花費的cpu時間。減Incl. Wall Time即爲等待cpu的時間  
    9. 減Excl. Wall Time即爲等待cpu的時間  
    10. ICpu% Incl. CPU(microsecs)的百分比  
    11. Excl. CPU(microsec) 函數執行自己花費的cpu時間,不包括子樹執行時間,以微秒算(一百萬分之一秒)。  
    12. ECPU% Excl. CPU(microsec)的百分比  
    13. Incl.MemUse(bytes) 包括子函數執行使用的內存。  
    14. IMemUse% Incl.MemUse(bytes)的百分比  
    15. Excl.MemUse(bytes) 函數執行自己內存,以字節算  
    16. EMemUse% Excl.MemUse(bytes)的百分比  
    17. Incl.PeakMemUse(bytes) Incl.MemUse的峯值  
    18. IPeakMemUse% Incl.PeakMemUse(bytes) 的峯值百分比  
    19. Excl.PeakMemUse(bytes) Excl.MemUse的峯值  
    20. EPeakMemUse% EMemUse% 峯值百分比  
相關文章
相關標籤/搜索