当PHP程序逻辑执行很复杂的时候,可能会带来性能上的问题,为了有效的找到影响性能的代码,推荐大家使用PHP新能分析工具XHProf,该工具能有效的分析每段代码的执行情况,非常好用
1、安装配置PHP的扩展XHProf
- $ wget https://github.com/facebook/xhprof/tarball/master -O xhprof.tar.gz
- $ tar zxf xhprof.tar.gz
- $ cd facebook-xhprof-b8c76ac/extension/
- # phpize
- # ./configure --with-php-config=`/path/to/php-config`
- # make && make install
- # make test
- # vi /etc/php.d/xhprof.ini
- ; 内容为:
- extension = xhprof.so
- ; 注意:output_dir 必须存在且可写
- xhprof.output_dir = /tmp/xhpro
- 然后重启apache服务
- # service php-fpm restart 或 service httpd restart
2、使用XHProf
- // start profiling
- xhprof_enable();
- // run program
- ....
- // stop profiler
- $xhprof_data = xhprof_disable();
- //
- // Saving the XHProf run
- // using the default implementation of iXHProfRuns.
- //
- 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();
- // Save the run under a namespace "xhprof_foo".
- //
- // **NOTE**:
- // By default save_run() will automatically generate a unique
- // run id for you. [You can override that behavior by passing
- // a run id (optional arg) to the save_run() method instead.]
- //
- $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
- echo "---------------\n".
- "Assuming you have set up the http based UI for \n".
- "XHProf at some address, you can view run at \n".
- "http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n".
- "---------------\n";
- 如此一来,会在上面设定的xhprof.output_dir目录里生成名字类似49bafaa3a3f66.xhprof_foo的数据文件,可以很方便的通过Web方式浏览效果:
3、展示输出结果
在 xhprof 源码包
中提供了xhprof_html
和 xhprof_lib
两个文件夹,xhprof_lib是用于 PHP 开发,而xhprof_html用于显示 xhprof 分析结果的 web 界面,访问形式如下