改進php應用程序的性能是一項很是耗時耗力的工做,可是究竟程序中是哪些函數消耗掉了大部分執行時間,這一般都不是很是明顯的。php
Xhprof 是facebook推出的輕量級的php性能分析工具,下面簡單介紹下Xhprof的安裝及使用。html
yum install graphviz
.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
[xhprof] extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xhprof.so xhprof.output_dir="/www/xhprof"
service php-fpm restart
xhprof安裝成功
4. 拷貝文件 解壓後的_xhprof-0.9.4_目錄下有兩個目錄_xhprof_html_,_xhprof_lib_須要用到,拷貝到網站目錄web
cd xhprof-0.9.4 cp xhprof_* -R /www
//開始分析 //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;
auto_prepend_file
,register_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); }
圖形界面 源代碼中的_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 能夠看到酷酷的圖形展現