原文地址:http://blog.csdn.net/maitiandaozi/article/details/8896293php
XHProf是facebook開源出來的一個php輕量級的性能分析工具,跟Xdebug相似,但性能開銷更低,還能夠用在生產環境中,也能夠由程序開 關來控制是否進行profile。html
1.安裝XHprof
- wget http://pecl.php.net/get/xhprof-0.9.2.tgz
- tar zxf xhprof-0.9.2.tgz
- cd xhprof-0.9.2
- cp -r xhprof_html xhprof_lib /你的web目錄路徑/xhprof/ (此處目的是創建數據分析目錄,可將此目錄配置成虛擬主機訪問)
- cd extension/
- /usr/local/webserver/php/bin/phpize
- ./configure –with-php-config=/usr/local/webserver/php/bin/php-config (php-config的路徑)
- 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信息。
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.的錯誤函數
- wget http://nchc.dl.sourceforge.net/project/libpng/libpng15/1.5.1/libpng-1.5.1.tar.gz //若是不可用,能夠在網上找一個下下來再編譯安裝
- tar zxf libpng-1.5.1.tar.gz
- cd libpng-1.5.1
- ./configure
- make
- make install
5.安裝graphviz,一個畫圖工具
- wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
- tar zxf graphviz-2.24.0.tar.gz
- cd graphviz-2.24.0
- ./configure--with-png=yes
- make && make install
6.使用方法:
- 頭部:
- xhprof_enable();
- //xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不記錄內置的函數
- //xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 同時分析CPU和Mem的開銷
- $xhprof_on = true;
-
- 生產環境可以使用:
- if (mt_rand(1, 10000) == 1) {
- xhprof_enable();
- $xhprof_on = true;
- }
-
- 尾部:
- if($xhprof_on){
- $xhprof_data = xhprof_disable();
- $xhprof_root = '/www/<span style="font-family: Arial, Helvetica, sans-serif;">(xhprof的虛擬主機目錄)</span>/';
- include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php";
- include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php";
- $xhprof_runs = new XHProfRuns_Default();
- $run_id = $xhprof_runs->save_run($xhprof_data, "hx");
- echo '<a href="http://(xhprof的虛擬主機域名)/xhprof_html/index.php?run='.$run_id.'&source=hx" target="_blank">統計</a>';
- }
-
- 運行程序,底部出現統計字樣,點過去就能夠看到性能分析了。按運行時間排序,很容易找出化時間最長的函數。
- 點[View Full Callgraph]圖形化顯示,最大的性能問題會用紅色標出,其次是黃色。
附運行結果裏的名次解釋:工具
- Function Name 函數名
- Calls 調用次數
- Calls% 調用百分比
- Incl. Wall Time (microsec) 調用的包括子函數全部花費時間 以微秒算(一百萬分之一秒)
- IWall% 調用的包括子函數全部花費時間的百分比
- Excl. Wall Time (microsec) 函數執行自己花費的時間,不包括子樹執行時間,以微秒算(一百萬分之一秒)
- EWall% 函數執行自己花費的時間的百分比,不包括子樹執行時間
- Incl. CPU(microsecs) 調用的包括子函數全部花費的cpu時間。減Incl. Wall Time即爲等待cpu的時間
- 減Excl. Wall Time即爲等待cpu的時間
- ICpu% Incl. CPU(microsecs)的百分比
- Excl. CPU(microsec) 函數執行自己花費的cpu時間,不包括子樹執行時間,以微秒算(一百萬分之一秒)。
- ECPU% Excl. CPU(microsec)的百分比
- Incl.MemUse(bytes) 包括子函數執行使用的內存。
- IMemUse% Incl.MemUse(bytes)的百分比
- Excl.MemUse(bytes) 函數執行自己內存,以字節算
- EMemUse% Excl.MemUse(bytes)的百分比
- Incl.PeakMemUse(bytes) Incl.MemUse的峯值
- IPeakMemUse% Incl.PeakMemUse(bytes) 的峯值百分比
- Excl.PeakMemUse(bytes) Excl.MemUse的峯值
- EPeakMemUse% EMemUse% 峯值百分比