PHP性能分析工具,你在用哪一個?

字號+ 編輯: Snake 修訂: 种花家 來源: PHP自学中心 2023-09-12 我要說兩句(0)

PHP性能分析工具,小編一直都在用這個:Xhprof, 今天給大家介紹一下如何安裝與如何使用,注意事項等!也許你會用得著的。

什麽是Xhprof

Xhprof是一個輕量級的分層性能測量分析器。在數據收集階段,它跟蹤調用次數與測量數據,展示程序動態調用的弧線圖。

它在報告、後期處理階段計算了獨佔的性能度量,例如運行經過的時間、CPU 計算時間和内存開銷。

Xhprof包含了一個基於 HTML 的簡單用戶界面(由 PHP 寫成),可以方便地瀏覽性能分析報告,這對理解代碼執行結構常常很有幫助。

安裝

Xhprof是PHP的一個擴展,所以只需要按照PHP擴展的編譯安裝方法來安裝即可。

1、下載擴展包

支持PHP 7+的Xhprof擴展包:https://github.com/longxinH/xhprof

wget https://github.com/longxinH/xhprof/archive/v2.2.0.tar.gz


2、解壓編譯

PHP擴展編譯三部曲:phpize、configure、make。

$ tar xzf xhprof-2.2.0.tar.gz
$ cd xhprof-2.2.0/extension
$ /usr/local/services/php7/bin/phpize
$ ./configure --prefix=/usr/local/services/php7/lib/php/extensions/no-debug-zts-20160303 --with-php-config=/usr/local/services/php7/bin/php-config
$ make

然後就可以在當前的modules目錄下看到編譯生成的so文档,將它拷貝到擴展目錄。

注:安裝autoconf庫:

yum -y install autoconf

3、配置php.ini

在php的配置文档中添加兩行配置,並重啓php-fpm:

extension=xhprof.soxhprof.output_dir=/data/release/xhprof_project/output

其中xhprof.output_dir用於指定存儲xhprof分析數據的目錄。

二、創建Xhprof項目

1、創建目錄

mkdir /data/release/xhprof_project

2、將相關文档拷貝到目錄下

cp -r /data/software/xhprof-2.2.0/xhprof_html /data/release/xhprof_project/
cp -r /data/software/xhprof-2.2.0/xhprof_lib /data/release/xhprof_project/

3、添加nginx訪問配置

server {
    listen 80; 
    server_name xhprof.wkwkk.com; 
    root /data/release/xhprof_project/xhprof_html;
    index index.php index.html; 
    location ~* \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        fastcgi_pass 127.0.0.1:9000; 
        fastcgi_index index.php;
    }
}

三、如何使用

在PHP腳本中使用的模式如下:

<?php
// 開始分析
xhprof_enable();
// 你的代碼
// 停止分析
$xhprof_data = xhprof_disable(); // 導入兩個庫文档
$XHPROF_ROOT = "/data/release/xhprof_project";
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_foo"); // 查看地址echo "http://xhprof.report.com/index.php?run=$run_id&source=xhprof_foo"

默認只會分析代碼的耗時,可以通過傳參控制是否分析代碼的memory和CPU性能數據:

xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

在瀏覽器打開輸出的地址,可以看到如下結果分析頁:

0000.jpg

圖中的表格給出了代碼的性能分析數據,分別表示:

  • Funciton Name:函數名

  • Calls:調用次數

  • Calls%:調用佔比

  • Incl. Wall Time (microsec):函數運行時間(包括子函數)

  • IWall%:函數運行時間(包括子函數)佔比

  • Excl. Wall Time(microsec):函數運行時間(不包括子函數)

  • EWall%:函數運行時間(不包括子函數)佔比

點擊頁面中[View Full Callgraph]鏈接,可以繪制出一張可視化的性能分析圖。

如果點擊後報錯failed to execute cmd:" dot -Tpng". stderr:sh:dot:command not found,可能是缺少依賴庫graphviz,安裝即可。

四、在Laravel項目中使用

方法一:直接使用

直接嵌在接口函數的開始和結束處:

// API接口
public function testApi(Request $request) {
// =============API開始處================ xhprof_enable();
// ===================================== 
for ($i=0; $i<5; $i++) {
    $this->bar($i); $len = strlen("songlee");
} // =============API結束處================ 
$xhprof_data = xhprof_disable(); 
$XHPROF_ROOT = "/data/release/xhprof_project"; 
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_foo"); // ===================================== 
return json_encode(true);
}
// 私有方法
private function bar($num) { 

if ($num > 0) {
 $this->bar($num - 1); 
}
}

這種方法顯然是最麻煩的。

方法二:封裝Helper

封裝成Helper放在app/Helpers目錄下,使用XhprofHelper::beginXhprof()、XhprofHelper::endXhprof()方法嵌入接口。

XhprofHelper如下:

<?php
namespace App\Helpers;
class XhprofHelper{ 
const XHPROF_ROOT = '/data/release/xhprof_project'; 
/** * 
開始分析 * @return mixed
 */ 

static public function beginXhprof() { 

xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY); 
return ; 

}
 /** * 
 停止分析 * @return mixed
  */ 
 static public function endXhprof() { 
 $xhprof_data = xhprof_disable(); // 導入兩個庫文档 
 include_once self::XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php"; 
 include_once self::XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php"; // 保存這次分析的結果數據 
 $xhprof_runs = new \XHProfRuns_Default(); 
 $run_id = $xhprof_runs->save_run($xhprof_data, "api_demo"); 
 return $run_id; 
 }
}

然後可以在代碼中使用:

// API接口
public function testApi(Request $request) { 

XhprofHelper::beginXhprof(); 

for ($i=0; $i<5; $i++) { 

$this->bar($i); 
$len = strlen("songlee");
 } 
 
 XhprofHelper::endXhprof(); 
 return json_encode(true);
 
}

方法三:在入口文档index.php中注入

將方法二中封裝的 XhprofHelper 文档放到入口文档所在的public目錄下,然後在index.php文档中加幾行代碼:

閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • PHP的換行符是什麽

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯繫商家解決

我要說說
網上賓友點評