xhprof可以监测接口的性能指标,但本身的UI做的并不友好,有人重新设计了界面,能更方便的查看。下载地址:https://github.com/preinheimer/xhprof。
安装xhprof
php5.5 + yaf 安装xhprof后,运行时会报segment error错误。这本身是xhprof的一个bug,请使用http://blog.bruceding.com/wp-content/uploads/2016/11/xhprof-master.zip。
安装xhporf gui
上面提到的gui版本下载下来。建立/opt/xhprof目录,把external,xhprof_html, xhprof_lib复制到目录下。
把xhprof_lib下的config.sample.php更改为config.php,然后配置下数据库信息,每次请求都会在数据库记录下来,只用到了一个数据表,在xhprof_lib/utils/Db/ 下的php文件中有建表语句。
1 2 3 |
$_xhprof['dot_binary'] = '/usr/bin/dot'; $_xhprof['dot_tempdir'] = '/tmp/xhprof'; $_xhprof['dot_errfile'] = '/tmp/xh_dot.err'; |
根据实际情况配置下,生成图片用的。
gui还可以配置允许访问的IP,如果关闭,直接 $controlIPs = false。
为了防止代码有侵入性,在nginx层面可以把xhprof注入进去。
1 2 3 4 5 6 7 |
location ~ .*\.php { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PHP_VALUE "auto_prepend_file=/opt/xhprof/external/header.php"; # 增加xhprof注入 include fastcgi_params; } |
一般情况下,我们主要关注接口性能,需要修改下header文件。正常情况下,在请求的url上添加_profile=1参数就自动开启xhprof监测(默认情况下关闭)。xhprof_gui会拿到这个参数,然后种下_profile cookie。
external/footer.php的文件也要修改下,默认情况下,如果不是ajax接口,xhprof_gui会在页面后面尾部添加链接,可以直接查看监测报告。在接口层面,如果添加这些信息就直接报错了,直接赋值 $isAjax =true;,这个按需修改。
配置nginx web访问xhprof
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
server { listen 8999; server_name xhprof.localhost.com; root /opt/xhprof/xhprof_html; proxy_set_header X-Forwarded-For $http_x_forwarded_for; index index.php; location = /favicon.ico { access_log off; log_not_found off; } location ~ .*\.php { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /(third-party|css|img|docs)/(.*)$ { alias /opt/xhprof/xhprof_html/$1/$2; } } |
这样可以通过localhost:8999访问了。