php效能分析工具XHProf安裝配置使用教程

來源:互聯網
上載者:User

XHProf是facebook 開發的一個測試php效能的擴充。

安裝Xhprof擴充

$ wget http://pecl.php.net/get/xhprof-0.9.4.tgz
$ tar -zxvf xhprof-0.9.4.tgz
$ cd xhprof-0.9.4
$ cd extension/
$ phpize
$ ./configure
$ make
$ sudo make install

修改php.ini

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp

配置中xhprof.output_dir指定了產生的profile檔案儲存體的位置,我們將其指定為/tmp。
對PHP進行效能分析
在XHProf擴充中,一共提供了四個函數用於對PHP進行效能分析。
xhprof_enable/xhprof_sample_enable函數用於開始XHProf效能分析,區別在於前者功能更加強大,而後者則是是以簡單模式啟動效能分析(簡單記錄了函數的調用棧資訊),開銷比較小。
xhprof_disable/xhprof_sample_disable函數用於停止效能分析,並返回分析的資料。
需要特別說明的函數是xhprof_enable,其他函數都是不需要提供參數的,而該函數則可以接受兩個可選的參數,用於改變該工具的行為。
void xhprof_enable ([ int $flags = 0 [, array $options ]] )

flags 該參數用於為剖析結果添加額外的資訊,該參數的值使用以下宏,如果需要提供多個值,使用|進行分隔。
XHPROF_FLAGS_NO_BUILTINS 跳過所有的內建函數
XHPROF_FLAGS_CPU 添加對CPU使用的分析
XHPROF_FLAGS_MEMORY 添加對記憶體使用量的分析
options 數組形式提供選擇性參數,在此處提供ignored_functions選項需要忽略的函數
比如下面的例子,同時對記憶體和CPU進行分析,並且忽略對call_user_func和call_user_func_array函數的分析。
xhprof_enable(
    XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU,
    [
        'ignored_functions'    => [
            'call_user_func',
            'call_user_func_array'
        ]
    ]
);

// 這裡是PHP代碼,比如商務邏輯實現等要被分析的代碼部分
....

$xhprofData = xhprof_disable();// $xhprofData是數組形式的分析結果
print_r($xhprofData);

注意,如果使用XHPROF_FLAGS_CPU選項對CPU佔用也進行分析,在Linux環境下,會造成比較高的系統負載,因此不建議使用,而推薦只使用XHPROF_FLAGS_MEMORY,對記憶體的分析不會對系統造成太多負載。
形象化的查看分析結果
使用xhprof_disable完成效能分析並且擷取到分析結果之後,我們通常不會直接輸出結果,因為這樣的結果是以數組形式組織的,看起來並不直觀,幸運的是,xhprof提供了基於web的圖形介面對分析結果進行查看。
在使用之前,請先確保伺服器安裝了graphviz工具,否則在產生監控圖表的時候回出現以下錯誤:
failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

這裡提示找不到dot命令,所以需要先安裝graphviz

$ sudo yum install graphviz

由於分析結果的查看工具是基於web的,因此,我們需要將xhprof安裝包中的xhprof_html和xhprof_lib目錄放到伺服器的web目錄下,讓xhprof_html目錄中的內容對外可以訪問。
比如我的測試伺服器環境是使用vagrant搭建的Cent OS,我見過這兩個目錄放到/vagrant/xhprof目錄下:

[vagrant@localhost xhprof]$ pwd
/vagrant/xhprof
[vagrant@localhost xhprof]$ ls
xhprof_html  xhprof_lib

web伺服器使用的是Nginx,因此,在Nginx的設定檔nginx.conf中的配置如下:
server {
    listen       80;
    server_name  _;
    root /vagrant;
    ...

web伺服器的根目錄是/vagrant,因此訪問地址為http://localhost/xhprof/xhprof_html/index.php.
當然,配置好環境之後,我們還是擷取不到分析結果的,因為我們在代碼中並沒有將分析結果儲存到xhprof.output_dir指定的目錄中。
因此,我們需要修改我們的代碼,是其能夠將分析結果存放到xhprof.output_dir指定的目錄中。
....
$xhprofData = xhprof_disable();
require '/vagrant/xhprof/xhprof_lib/utils/xhprof_lib.php';
require '/vagrant/xhprof/xhprof_lib/utils/xhprof_runs.php';

$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprofData, 'xhprof_test');

echo 'http://localhost/xhprof/xhprof_html/index.php?run=' . $runId . '&source=xhprof_test';

 

變數 $runId是本次請求產生分析結果的id,最後我們輸出了一個連結地址,使用改地址就可以看到本次請求的分析結果。
注意到中間的 View Full Callgraph連結,通過該連結我們可以看到圖形化的分析結果。
圖中紅色的部分為效能比較低,耗時比較長的部分,我們可以根據根據哪些函數被標記為紅色對系統的代碼進行最佳化
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.