使用XHProf進行線上PHP性能追蹤及分析

sunshiming 8年前發布 | 11K 次閱讀 PHP開發 xhprof

今天介紹下大家并不陌生的XHProf。它是非死book開發的用來分析線上PHP性能的工具。相比較于Xdebug,占用內存和性能更低。

1.XHProf安裝

# wget http://pecl.php.net/get/xhprof-0.9.4.tgz
# tar zxvf xhprof-0.9.4.tgz
# cd xhprof-0.9.4/extension/
# phpize //結合自己的環境確認phpize的目錄
# ./configure --with-php-config=/usr/local/php/bin/php-config //結合自己的環境確認phpize的目錄
# make
# make install

安裝完成后,在php.ini中添加 extension=xhprof.so。

重啟下web應用服務器。

2.監控配置

PHP5.5以下,PHP文件中開啟的代碼

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

PHP5.5及以上,PHP文件中開啟的代碼

xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

簡單的方式網上都可以百度到,下面主要講下更好的注入方式。使用PHP本身進行注入,這樣就不用修改PHP的項目代碼。

具體的注入方式為:修改php.ini的文件,加上 auto_prepend_file =  /opt/inject_xhprof.php,這樣所有的php-fpm請求的php文件前都會自動注入/opt/inject_xhprof.php文件。inject_xhprof.php代碼如下:

if(php_sapi_name() == 'cli')
{
return;
}

$xhprof_config = require "/opt/xhprof_config.php";

if(!empty($xhprof_config['enabled']) && strpos($xhprof_config['allowUrl'],$_SERVER['SERVER_NAME']) !== false)
{
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

register_shutdown_function('shutdown');

}

function shutdown()
{
$xhprof_data = xhprof_disable();
include_once "/wwwroot/tools/xhprof/xhprof_lib/utils/xhprof_lib.php";
include_once "/wwwroot/tools/xhprof/xhprof_lib/utils/xhprof_runs.php";

$objXhprofRun = new XHProfRuns_Default();
$run_id = $objXhprofRun->save_run($xhprof_data, "xhprof");
//此處空間很大
if(function_exists('fastcgi_finish_request'))
{
fastcgi_finish_request();
}
}

以上的代碼是基于LNMP,其中PHP5.2.17 、MySQL5.6 、Nginx1.4進行測試的。以上的方法就不用在PHP的代碼中加上開始和結束的XHProf的代碼了。

其中xhprof_config.php可以配置是否開啟調試、哪些網站允許調試、哪些IP允許執行XHProf等操作。

此處空間很大。具體可以做的事情為: 將生產的$run_id異步存入數據庫或者Redis,這樣就可以方便的進行兩次優化的性能對比,輸入網址,直接查看當前地址的性能。

3.WEB查看

將xhprof_html拷貝到單獨的目錄下,配置獨立的域名,這樣可以更方便的管理。

4.總結

XHProf追蹤和分析PHP性能的確不錯。但是為了不影響線上的性能,最好放在灰度環境進行測試。如果放在線上測試的話,建議做一個隨機值,比如沒1000次進行一次分析。

將$run_id異步存入數據庫或者Redis也是為了更好地分析。

以前在只開啟xhprof_enable的時候,沒有關閉操作,導致頁面加載很慢,具體的原因沒有找到,所以大家在做判斷的時候,最好xhprof_enable 和 xhprof_disable 一起判斷。

 

來自: http://blog.mofeiwo.com/xhprof_php/

 

 本文由用戶 sunshiming 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!