首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 性能分析利器 Xhprof 安裝與實戰指南

     編輯:PHP 相關知識

PHP 性能分析利器 Xhprof 安裝與實戰指南

Xhprof 是 Facebook 開源的輕量級 PHP 性能分析工具,類似 Xdebug 但開銷極低,可安全運行於生產環境,並支援通過代碼控制開關。本文記錄從源碼編譯安裝到生成可視化報告的完整流程。

一、環境準備與源碼編譯安裝

# 1. 下載源碼包(以 0.9.3 版為例)
wget https://pecl.php.net/get/xhprof-0.9.3.tgz

# 2. 解壓並進入擴展目錄
tar zxf xhprof-0.9.3.tgz
cd xhprof-0.9.3/extension

# 3. 生成 configure 腳本(需 phpize,路徑根據實際 PHP 安裝位置調整)
/usr/bin/phpize

# 4. 配置編譯參數(php-config 路徑同理)
./configure --with-php-config=/usr/bin/php-config

# 5. 編譯並安裝
make && sudo make install
# 擴展文件 xhprof.so 會自動複製到 PHP 擴展目錄(如 /usr/lib64/php/modules)

二、php.ini 配置啟用擴展

; 根據 phpinfo 確認 extension_dir
extension=xhprof.so

; 指定分析數據輸出目錄(需可寫權限)
xhprof.output_dir=/tmp/xhprof

修改後重啟 PHP-FPM 或 Apache:sudo /etc/init.d/httpd restart(或 systemctl restart php-fpm)。

三、驗證安裝

查看 phpinfo() 輸出,搜索 "xhprof" 確認擴展已加載。

四、代碼埋點:啟用、停用與數據保存

<?php
// 1. 啟用分析(可選標誌位組合)
xhprof_enable(); 
// xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); // 忽略內置函數
// xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); // 同時分析 CPU 與內存

// --- 待測試的業務代碼區塊 ---
// ...
// ---------------------------

// 2. 停用並獲取原始數據
$xhprof_data = xhprof_disable();

// 3. 保存運行數據並生成報告鏈接
$xhprof_root = '/var/www/xhprof/'; // 虛擬主機指向的 xhprof 目錄
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, "xhprof");

echo '<a href="https://xhprof.example.com/xhprof_html/index.php?run=' . $run_id . '&source=xhprof" target="_blank">查看 Xhprof 分析報告</a>';
?>

五、部署 Web 界面(xhprof_html & xhprof_lib)

將源碼包中的 xhprof_html 和 xhprof_lib 目錄複製到可訪問的 Web 目錄:

cp -r xhprof_html xhprof_lib /var/www/xhprof/

在 Nginx/Apache 中配置虛擬主機指向 /var/www/xhprof,即可通過瀏覽器訪問報告。

六、報告界面關鍵指標解讀

欄位含義
Function Name函數名
Calls調用次數
Incl. Wall Time (microsec)包含子函數的總耗時(微秒)
Excl. Wall Time (microsec)函數自身耗時(不含子函數)
Incl. CPU / Excl. CPUCPU 佔用時間(含/不含子函數)
Incl. MemUse / Excl. MemUse內存佔用(含/不含子函數,字節)
Incl. PeakMemUse / Excl. PeakMemUse峰值內存佔用

調用圖:點擊 [View Full Callgraph] 可生成 Graphviz 圖形化調用鏈,紅色節點代表最大性能瓶頸,黃色次之。若報錯請安裝:yum install -y graphviz graphviz-gd。

七、生產環境使用建議

  1. 採樣率控制:不要 100% 請求都開啟,可用 if (mt_rand(1, 100) === 1) xhprof_enable(); 實現 1% 採樣。
  2. 數據清理:定期清理 xhprof.output_dir 目錄下舊的運行數據文件,防止磁盘佔滿。
  3. 標識來源:save_run($data, "source_name") 的第二個參數用於區分不同項目/模塊(如 "api", "backend", "cron")。
  4. 對比優化:優化前後各跑一次報告,對比 Excl. Wall Time 和 Excl. MemUse 確認效果。

八、參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved