php的层次试性能分析器tideways

摘要:php 的层次试性能分析器 tideways

php 层次性能分析器 xhprof,但是这个 xhprof 扩展 最后一次是在 2013-9-30日,已经不在对它进行维护和更新了,也不支持 php 7 了,如果需要还是想用 xhprof 可以从 GitHub 上自行下载安装。

网上说的目前可以使用 tideways 这个分析器配合 xhgui 的 UI 效果(如果使用 xhgui 炫酷的分析效果才用付费),可以很好起到分析和数据展示效果。

tideways 的安装

git clone https://github.com/tideways/php-profiler-extension.git
/usr/local/php/bin/phpize 
./configure --with-php-config=/usr/local/php/bin/php-config
make 
make install

# 编辑 php.ini 文件
vim /usr/local/php/etc/php.ini
extension=tideways_xhprof.so

# 保存退出,重启 php 服务

其中 xhprof.output_dir 是 xhprof 的输出目录,每次执行 xhprof 的 save_run 方法时都会生成一个 run_id.project_name.xhprof 文件。这个目录在哪里并不重要。注意此路径的权限要可读写,否则文件无法生成成功!

xhprof的基本使用

由于 xhprof 包含了一个基于 HTML 的简单用户界面(由 PHP 写成)。 基于浏览器的用户界面使得浏览、分享性能数据结果更加简单方便。 同时也支持查看调用图。所以我们必须将 xhprof 放在php项目环境中运行。

复制xhprof_html和xhprof_lib到项目目录

[root@host xhprof]# cp -r xhprof_html /usr/local/nginx/html/
[root@host xhprof]# cp -r xhprof_lib/ /usr/local/nginx/html/

因为待会我们要访问..xhprof/index.php文件查看分析后的结果,所以直接将 xhprof_html 和 xhprof_lib 文件放在了项目目录下。

新建head.php

<?php
if(extension_loaded('xhprof')){
    // 载入刚复制过来xhprof_lib中的两个文件
	include_once '/usr/local/nginx/html/xhprof_lib/utils/xhprof_lib.php';
	include_once '/usr/local/nginx/html/xhprof_lib/utils/xhprof_runs.php';
    // 启动xhprof
    xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}

新建foot.php

<?php
if(extension_loaded('xhprof')){
    $ns = 'myXhprof';
    // 关闭profiler
    $xhprofData = xhprof_disable();
    // 实例化类
    $xhprofRuns = new XHProfRuns_Default();
    $runId = $xhprofRuns->save_run($xhprofData, $ns);
    // 前端展示库的URL
    $url = 'http://xx.xxx.xxx.xxx/xhprof_html/index.php';
    $url .= '?run=%s&source=%s';
    // 变量替换
    $url = sprintf($url, $runId, $ns);
    // 输入URL
    echo '<a href="'.$url.'" target="_blank">查看结果</a>';
}

新建test.php测试文件引入开头和结束文件

<?php
include_once 'head.php';
echo 'Hello World';
include_once 'foot.php';

   访问test.php文件,点击“查看结果”,可以看到本次请求所使用到的所有函数的列表,每个函数所耗费的时间、CPU、Memory等信息,点击第一栏可以根据所选排序。点击[View Full Callgraph]可以看到由本列表所生成的流程图,从入口到哪个函数,又到哪个函数,这个函数调用了哪个函数,这个函数调用了多少次Memcache等,一幕了然。减少MC的调用,减少这个,减少那个,请求的响应速度能不快吗?

点击[View Full Callgraph]链接时产生报错:failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '这是因为没有安装图形化工具,我是centos系统,安装graphviz,这样每次都会生成一个分析图。

[root@host html]# yum install graphviz

返回查看之前 /var/local/xhprof/ 目录下,每一次的分析的结果都会生成一个 .xhprof文件,文件的内容就是每次的分析结果,时间久了这个文件会越来越大,定时清理就好。

[root@host xhprof]# ll
total 12
-rw-r--r-- 1 www www 318 Feb 24 20:36 5c7346a7a1fca.myXhprof.xhprof
-rw-r--r-- 1 www www 318 Feb 24 20:38 5c734711c147d.myXhprof.xhprof
-rw-r--r-- 1 www www 318 Feb 24 20:38 5c7347126bd74.myXhprof.xhprof

假如我有1000个文件难道我都要引入这个 head.php 和 foot.php 吗?不用,我们只需要在 php.ini 中加入,但是不建议这样做,这样所有的文件都会引入这个 head.php 和 foot.php 文件,有时候我们可能只需要测试某部分的性能而不是所有的。

auto_prepend_file = /usr/local/nginx/html/head.php
auto_append_file = /usr/local/nginx/html/foot.php

或者在 .htaccess 中添加

php_value auto_prepend_file = /usr/local/nginx/html/head.php
php_value auto_append_file = /usr/local/nginx/html/foot.php

这里顺便给大家介绍一个xhprof gui , 一个xhprof的一个ui展现。使xhprof页面更漂亮,功能更强大。源码地址:https://github.com/preinheimer/xhprof,它的基本流程是将每一次分析结果存入数据库中,然后对每次的分析结果都做了更好的ui展示,使用起来更加的方便。

结束语:感谢您对本网站文章的浏览,欢迎您的分享和转载,但转载请说明文章出处。
Top