Xhprof php性能測試工具用法小結

簡介

改進php應用程序的性能是一項很是耗時耗力的工做,可是究竟程序中是哪些函數消耗掉了大部分執行時間,這一般都不是很是明顯的。php

Xhprof 是facebook推出的輕量級的php性能分析工具,下面簡單介紹下Xhprof的安裝及使用。html

準備

  1. 下載:
    https://pecl.php.net/package/xhprof xhprof-0.9.4.tgz 官網
  2. 展現圖形界面須要
    yum install graphviz.

安裝

  1. 編譯擴展
wget https://pecl.php.net/get/xhprof-0.9.4.tgz
 tar xzf xhprof-0.9.4.tgz
 cd xhprof-0.9.4
 cd extension
 /usr/local/bin/phpize 
 ./configure --with-php-config=/usr/local/bin/php-config
 make && make install

輸入圖片說明

  1. 增長如下代碼到php.ini文件中
[xhprof]
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xhprof.so
xhprof.output_dir="/www/xhprof"
  1. 重啓 php
service php-fpm restart

輸入圖片說明
xhprof安裝成功
4. 拷貝文件 解壓後的_xhprof-0.9.4_目錄下有兩個目錄_xhprof_html_,_xhprof_lib_須要用到,拷貝到網站目錄web

cd xhprof-0.9.4
  cp xhprof_* -R /www

使用

  1. 簡單示例
    _xhprof-0.9.4_目錄下 有個examples目錄,有個sample.php示例能夠參考下,下面列出個簡單用法流程
//開始分析
//XHPROF_FLAGS_CPU 使輸出的性能數據中添加 CPU 數據。
//XHPROF_FLAGS_MEMORY 使輸出的性能數據中添加內存數據。
//XHPROF_FLAGS_NO_BUILTINS (integer) 使得跳過全部內置(內部)函數。
//若是都監控多個能夠用XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
//程序代碼執行
 ......
include_once "xhprof_lib/utils/xhprof_lib.php";   
include_once "xhprof_lib/utils/xhprof_runs.php";   
$namespace = 'demo';
// 中止分析,獲取數據,保存數據
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, $namespace);
//查看運行結果的url  
//run_id,source
//localhost 用本身的域名替換 
echo "http://localhost/xhprof_html/index.php?run=".$run_id."&source=".$namespace;
  1. 更好的方式
    要分析現有的項目,不可能修改項目的源代碼,因此咱們能夠利用php的auto_prepend_fileregister_shutdown_function來注入代碼,在這裏咱們用auto_prepend_file方式來示例. 增長如下代碼到php.ini文件中
auto_prepend_file = "/data/www/header.php"
auto_append_file =  "/data/www/footer.php"

header.php 文件內容cookie

$xhprof_switch = false;
//爲了減小性能開銷,1000次只有一次進行性能採集
//判斷cookie的值,能夠方便灰度測試
if (isset($_COOKIE['xhprof_on'])) {
    $xhprof_switch = true;
} else {
    if (mt_rand(1, 1000) === 1) {
        $xhprof_switch = true;
    }
}
if ($xhprof_switch) {
   if (extension_loaded('xhprof')) {
       include_once '/www/xhprof_lib/utils/xhprof_lib.php';
       include_once '/www/xhprof_lib/utils/xhprof_runs.php';
       xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
   }
}

footer.php 文件內容app

if ($xhprof_switch && extension_loaded('xhprof')) {
     $namespace = 'demo';
     $xhprof_data = xhprof_disable();
     $xhprof_runs = new XHProfRuns_Default();
     $run_id = $xhprof_runs->save_run($xhprof_data, $namespace);
}
  1. 圖形界面 源代碼中的_xhprof_html_目錄咱們已經放到web目錄了,直接進行訪問http://xxx/xhprof_html/index.php 能夠看到圖形界面了,點擊一個列表進去就能夠看到以下統計表格了 輸入圖片說明函數

    Wall Time:總執行時間php-fpm

    CUP Time:CPU佔用時間工具

    Memory Usage:內存佔用率性能

    Peak Memory Usage:內存峯值測試

    Number of Calls:方法的調用次數

    點擊 Callgraph 能夠看到酷酷的圖形展現

擴展閱讀

相關文章
相關標籤/搜索