一、前言
有用的東西還是記錄下來吧,也友善以後的查詢;這次記錄一下xhprof的安裝使用;
xhprof是facebook開源出來的一個php輕量級的性能分析工具,跟Xdebug類似,但性能開銷更低,
還可以用在生産環境中,也可以由程式開 關來控制是否進行profile。
二、安裝
1. wget http://pecl.php.net/get/xhprof-0.9.3.tgz
2. tar zxf xhprof-0.9.3.tgz
3. cd xhprof-0.9.3/extension
4. /usr/bin/phpize
(php版本安裝後生成的phpize檔案,可根據phpinfo檢視,是以php版本不同,生成的phpize也不同,此步驟主要生成configure檔案)
5. ./configure –with-php-config=/usr/bin/php-config
(php-config的路徑,也是php安裝後生成的檔案)
6. make
7. sudo make install
(會自動将生成的擴充檔案拷貝到擴充目錄中/usr/lib64/php/modules)
當然具體的php檔案的目錄,每個人不盡相同,可根據phpinfo查詢
三、php.ini配置
1 根據phpinfo找到 extension_dir的目錄
2 (/etc/php.d/xhprof.ini)
3
4 添加一下内容:
5
6 extension=xhprof.so
7 xhprof.output_dir=/tmp/xhprof //xhprof的分析日志
四、重新開機服務
1 sudo /etc/init.d/http restart
2
3 檢視phpinfo是否安裝成功
五、使用方法
1 開頭:
2 xhprof_enable(); //開啟監測
3 //xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不記錄内置的函數
4 //xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 同時分析CPU和Mem的開銷
5
6 //要測試的代碼
7 ...
8 ...
9 ...
10
11 結尾:
12 $xhprof_data = xhprof_disable(); //停止監測,傳回運作資料
13 $xhprof_root = '/(xhprof的虛拟主機目錄)/';
14 //引入當初安裝到xhprof虛拟主機目錄中的檔案
15 include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php";
16 include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php";
17 $xhprof_runs = new XHProfRuns_Default();
18 $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof");
19 echo '<a href="http://(xhprof的虛拟主機域名)/xhprof_html/index.php?run='.$run_id.'&source=xhprof" target="_blank">xhprof統計</a>';
上邊的代碼使用了,給xhprof設定虛拟主機的方法。
把源碼包中的 xhprof_html 和 xhprof_lib 檔案夾拷貝到自己建立的虛拟目錄中
cp -r xhprof_html xhprof_lib /xxx/xhprof/ (此處目的是建立資料分析目錄,可将此目錄配置成虛拟主機通路)
運作後,統計點選傳回的 xhprof統計 連結,即可。
六、注意問題以及名詞解釋
在顯示的統計頁面中,點[View Full Callgraph]圖形化顯示(最大的性能問題會用紅色标出,其次是黃色);
點選後,可能提示錯誤消息,執行以下指令即可
1 yum install -y graphviz
2 yum install graphviz-gd
名詞解釋
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% 峰值百分比
七、參考資料
1 http://blog.csdn.net/maitiandaozi/article/details/8896293
2 http://www.cnblogs.com/wangtao_20/archive/2011/03/16/1986508.html
3 http://www.cnblogs.com/wangtao_20/archive/2013/09/13/3320497.html
4
5 http://avnpc.com/pages/profiler-php-performance-online-by-xhprof
6 http://www.ituring.com.cn/article/132392
7 http://www.ituring.com.cn/article/133062?utm_source=tuicool