Xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug相似,但性能开销更低,还能够用在生产环境中,也能够由程序开关来控制是否进行profile。php
对于还在使用php5的朋友们,能够安装pecl的xhprof扩展html
http://pecl.php.net/package/xhprof
可是由于长时间不更新,针对php7已没法正常安装,可使用下的地址git
https://github.com/longxinH/xhprof/releases
1、安装xhprofgithub
下载xhprof源码php7
wget https://github.com/longxinH/xhprof/archive/v2.1.0.tar.gz
解压源码包svg
tar xf v2.1.0.tar.gz
进入目录函数
cd xhprof-2.1.0/extension
运行phpize,请自行修改大家的phpize路径工具
/data/nmp/php7/bin/phpize
运行configure,请自行修改大家的php-config路径gitlab
./configure --with-php-config=/data/nmp/php7/bin/php-config
编译安装性能
make && make install
修改php.ini配置,若是extension_dir配置了就不用再配置了,若是没配置,则把该目录指向,扩展编译安装后显示的路径。
extension_dir = "/data/nmp/php7/lib/php/extensions/no-debug-zts-20170718" [xhprof] extension = xhprof.so xhprof.output_dir = /tmp/xhprof
2、配置xhprof
咱们把扩展目录下的xhprof_html和xhprof_lib复制出来,单独存放到一个目录中。
cp -a xhprof_html /data/wwwroot/xhprof cp -a xhprof_lib /data/wwwroot/xhprof
针对要分析的项目,能够把以下代码添加到入口文件中:
//开启性能分析 xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU); //php停止时运行的函数 register_shutdown_function(function () { //中止性能分析 $xhprof_data = xhprof_disable(); if (function_exists('fastcgi_finish_request')) { fastcgi_finish_request(); } //引入xhprof库文件,路径请自行修改 $XHPROF_ROOT = realpath(dirname(__FILE__) . '/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(); //导出性能分析数据,默认xhprof.output_dir指定的目录 $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof'); });
数据默认会导出到xhprof.output_dir指定目录,因此需建立该目录,并给予相关权限
mkdir /tmp/xhprof chmod -R 777 /tmp/xhprof
这里咱们写一个简单程序进行一下演示
<?php error_reporting(E_ALL); ini_set('display_errors', 'on'); //开启性能分析 xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU); //php停止时运行的函数 register_shutdown_function(function () { //中止性能分析 $xhprof_data = xhprof_disable(); if (function_exists('fastcgi_finish_request')) { fastcgi_finish_request(); } //引入xhprof库文件,路径请自行修改 $XHPROF_ROOT = realpath(dirname(__FILE__) .'/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(); //导出性能分析数据,默认xhprof.output_dir指定的目录 $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof'); }); function a() { echo 'aaa'; sleep(1); b(); } function b() { echo 'bbb'; sleep(3); c(); } function c() { echo 'ccc'; sleep(5); } a();
3、配置虚拟主机,用来查看分析日志
server { listen 80; server_name xhprof.xxx.com; charset utf-8; root /data/wwwroot/xhprof/xhprof_html; index index.html index.htm index.php; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
咱们能够经过访问xhprof.xxx.com来查看分析日志了。
若是点击 [View Full Callgraph] 没法查看,则需装以下工具:
yum install -y libpng yum install -y graphviz
若是上面安装完后,仍是没法显示,并报以下错误:
failed to execute cmd: " dot -Tpng". stderr: `Format: "png" not recognized. Use one of: canon cmap cmapx cmapx_np dot eps fig gv imap imap_np ismap pic plain plain-ext pov ps ps2 svg svgz tk vml vmlz xdot '
咱们须要手动安装 graphviz
https://graphviz.gitlab.io/_pages/Download/Download_source.html
下载源码包,并编译安装
tar xf graphviz.tar.gz cd graphviz-2.40.1 ./configure make make install