各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

使用XHProf分析PHP性能瓶颈的方法一

管理员 2023-09-05
PHP
123

使用XHProf分析PHP性能瓶颈的方法一

内容导读

收集整理的这篇技术教程文章主要介绍了使用XHProf分析PHP性能瓶颈的方法一,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4876字,纯文字阅读大概需要7分钟

内容图文

安装xhprof扩展

wget http://pecl.php.com/get/xhprof-0.9.4.tgztar zxf xhprof-0.9.4.tgzcd xhprof-0.9.4/extension/sudo phpize./configuresudo makesudo make installcd ../

配置php.ini

[xhprof]extension=xhprof.soxhprof.output_dir=/tmp
注:xhprof已经很久没有更新过了,截至目前还不支持php7,php7可以使用 https://github.com/phacility/...。

配置xhprof环境

需要把xhprof压缩包里的两个目录复制到指定目录(假设定义到 /work/xhprof/):

mkdir /work/xhprof/cp -a xhprof_html/ /work/xhprof/cp -a xhprof_lib/ /work/xhprof/

然后在项目框架的入口文件添加:

xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);register_shutdown_function(function() {    $xhprof_data = xhprof_disable();    if (function_exists('fastcgi_finish_request')){        fastcgi_finish_request();    }    include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";    include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";    $xhprof_runs = new XHProfRuns_Default();    $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');});

代码解析:
$xhprof_data中记录了程序运行过程中所有的函数调用时间及CPU内存消耗,具体记录哪些指标可以通过xhprof_enable的参数控制,目前支持的参数有:

  • HPROF_FLAGS_NO_BUILTINS 跳过所有内置(内部)函数。

  • XHPROF_FLAGS_CPU 输出的性能数据中添加 CPU 数据。

  • XHPROF_FLAGS_MEMORY 输出的性能数据中添加内存数据。

之后的处理已经与xhprof扩展无关,大致是编写一个存储类XHProfRuns_Default,将$xhprof_data序列化并保存到某个目录,可以通过XHProfRuns_Default(__DIR__)将结果输出到当前目录,如果不指定则会读取php.ini配置文件中的xhprof.output_dir,仍然没有指定则会输出到/tmp

xhprof_enablexhprof_disable是成对出现的,一个是代码运行最前面,一个是最后面。中间是要分析的代码。

经过上面的配置后,我们后续请求项目的接口,xhprof就会分析请求过程中的CPU、内存、耗时等内容。日志保存在xhprof.output_dir目录。

配置web

配置好了,怎么查看日志呢?我们可以搭建一个简单的web server:

xhprof.test.com.conf

server {    listen       80;    server_name  xhprof.test.com;    root /work/xhprof/xhprof_html;    index  index.html 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.test.com。重启nginx,打开 xhprof.test.com就可以看到效果了:


默认的UI里列出了:

  • funciton name : 函数名

  • calls: 调用次数

  • Incl. Wall Time (microsec): 函数运行时间(包括子函数)

  • IWall%:函数运行时间(包括子函数)占比

  • Excl. Wall Time(microsec):函数运行时间(不包括子函数)

  • EWall%:函数运行时间(不包括子函数)

在web中还可以看到 [View Full Callgraph] 链接,点击后可以绘制出一张可视化的性能分析图,如果点击后报错的话,可能是缺少依赖graphviz。graphviz是一个绘制图形的工具,可以更为直观的让你查看性能的瓶颈。如果需要可以安装:

yum install -y libpngyum install -y graphviz

效果:

非侵入式引入xhprof

前面我们是通过在项目入口文件添加代码实现了分析的功能。更优雅的方式是新建一个额外的文件 xhprof.inc.php,保存在/work/xhprof/目录下:

xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);register_shutdown_function(function() {    $xhprof_data = xhprof_disable();    if (function_exists('fastcgi_finish_request')){        fastcgi_finish_request();    }    include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";    include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";    $xhprof_runs = new XHProfRuns_Default();    $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');});

利用PHP的自动加载功能,在执行代码前注入此文件,编辑php.ini:

auto_prepend_file = /work/xhprof/xhprof.inc.php

然后重启PHP服务。这样所有使用该php环境的都会生效。

或者写到指定项目的nginx配置里也行:
jifen.cc.conf

location ~ .php$ {                fastcgi_pass   127.0.0.1:9000;        fastcgi_index  index.php;        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;    fastcgi_param PHP_VALUE "auto_prepend_file=/work/xhprof/xhprof.inc.php";        include        fastcgi_params;    }

然后重启nginx服务。这样仅该项目生效。

通过 auto_prepend_file 和 auto_append_file包含的文件在此模式下会被解析,但有些限制,例如函数必须在被调用之前定义。

修改采样频率

默认情况下,xhprof每次都会运行,线上环境如果这么设置,会对性能有影响。

xhprof.inc.php

<?php$profiling = !(mt_rand()%9); if($profiling) xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);register_shutdown_function(function() use($profiling) {    if($profiling){        $xhprof_data = xhprof_disable();        if (function_exists('fastcgi_finish_request')){            fastcgi_finish_request();        }        include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";        include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";        $xhprof_runs = new XHProfRuns_Default();        $xhprof_runs->save_run($xhprof_data, 'xhprof');        }});

总结

本篇文章里,我们介绍了如何基于xhprof扩展来分析PHP性能,并记录到日志里,最后使用xhprof扩展自带的UI在web里展示出来。主要知识点:

  • 安装xhprof扩展

  • 在应用里注入xhprof

  • 基于nginx展示分析结果

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

php7+的php-fpm参数配置的注意事项

解决laravel-admin中select在form编辑时不能自动选中当前的值的问题

以上就是使用XHProf分析PHP性能瓶颈的方法一的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的使用XHProf分析PHP性能瓶颈的方法一全部内容,希望文章能够帮你解决使用XHProf分析PHP性能瓶颈的方法一所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部