利用PHP扩展Xhprof分析项目性能实践教程
php  /  管理员 发布于 7年前   143
一、背景 项目即将上线,想通过一些工具来分析代码的稳定性和效率,想起在上个团队时使用过的xhprof扩展;因为换了新电脑,所以需要重新编译此扩展,现将安装与实际排查过程完整记录下来,方便自己回顾和帮助更多的读者。 XHProf 是 FaceBook 开发的一个函数级别的 PHP 分层分析器。 数据收集部分是一个基于 C 的 PHP 扩展,分析报告是一系列基于 PHP 的 HTML 导航页面。 XHProf 能统计每个函数的调用次数、内存使用、CPU占用等多项重要的数据。 并且 XHProf 还能比较两个统计样本,或从多个数据样本中汇总结果。 XHProf 是分析 PHP 程序执行效率的利器,能让我们得到更底层的的分析数据。 下面话不多说了,来一起看看详细的介绍吧 二、操作步骤 三、安装 xhprof扩展PHP并不自带,需要笔者去单独安装它,安装之后才能使用,笔者这里采用源码安装方式,安装过程如下 3.1 下载源码 xhprof在PHP的PECL官方上面已经比较老了,笔者的PHP版本为PHP7.1因此,需要在GitHub上下载xhprof上比较新的源码,参考命令如下 3.2 检测环境 进入编译的文件夹,参考命令 现在笔者需要编译一下源码,在编译之前可以使用phpze来探测PHP的环境,参考命令如下: 返回结果如下 Configuring for: 3.3 编译安装 生成 Makefile,为下一步的编译做准备 返回结果如下 creating libtool 开始编译,并进行安装 返回结果如下 Build complete. Installing shared extensions: /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/ 从返回信息中可以看到已经安装完成,并显示了扩展文件存放的位置 四、配置 在编译安装源码之后,笔者还需要对PHP的配置文件夹以及xhprof的进行一些简单的配置,操作过程如下所示 4.1 找出配置文件位置 要修改PHP的配置首先需要知道配置文件在什么位置,这里可以通过PHP的命令来查看配置文件存放位置,参考命令如下: 执行命令后,返回结果如下 Configuration File (php.ini) Path: /usr/local/etc/php/7.1 在返回结果当中,可以看到多个配置文件的路径,笔者所需要的是第二个文件php.ini 查看扩展目录存放位置,参考命令如下 返回结果如下 extension_dir = "/usr/local/lib/php/pecl/20160303" 4.2 修改配置 从返回的结果当中,可以看到扩展的存放目录位置如下 /usr/local/lib/php/pecl/20160303 现在需要将刚才编译好的xhprof扩展复制到该目录当中,参考命令如下 通过vim编辑器编辑配置文件,参考命令如下 在配置文件尾部增加xhprof的配置,以及自定义一个用来保存xhprof生成的源文件参考配置如下 4.3 重启生效 保存好之后,笔者重启php-fpm让其配置生效,重启命令可以通过brew命令来查看,参考命令如下: 在命令执行后,返回的信息中可以看到如下信息 因此笔者构造的重启PHP-FPM命令如下: 重启完成后,返回结果如下 4.4 验证安装 现在验证xhprof扩展是否已经安装完成,参考命令如下 命令执行后,安装扩展成功的返回结果将会显示xhprof,如下图所示 五、测试 经过上面的操作笔者已经成功的安装与配置,现在需要用PHP代码来进行验证xhprof的分析效果 5.1 创建虚拟主机 首先创建一个虚拟主机,让用户可以通过浏览器访问所访问,创建虚拟主机需要有一个根目录,并编辑nginx配置文件,具体操作如下: 5.1.1 创建项目目录 创建项目根目录,参考命令如下 创建成功之后,笔者需要将之前git拉下来的部分代码复制到项目根目录当中,参考命令如下 5.1.2 编辑配置文件 添加配置文件,参考命令 添加配置文件如下 在/etc/hosts文件中增加入一行解析记录,记录内容如下: 5.2 新建测试代码 在git仓库的examples文件夹下,已经有了一份demo代码,不过这份代码的注释都是英文,而且排版方式也不易笔者自己理解,因此笔者重新编辑了此文件,参考步骤如下命令 使用vim新建一个PHP文件 在文件中加入以下代码 保存代码之后,通过浏览器访问对应的URL地址,URL地址如下所示 http://test.localhost/xhprof/test.php 5.3 结果分析 运行后结果,如下图 在页面中可以看到一个URL地址,复制并打开此URL地址之后,便能看到此代码的分析结果,如下图所示 在页面中有一个列表,展示了每一个方法所消耗的时间,如果觉得列表的方式表示不够清晰,点击页面中的 View Full Callgraph 链接可以直接生成一个图片,如下图所示 在图中很清晰的可以看到执行时间都消耗在test方法上,因此笔者可以针对这个方法进行针对性的优化。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对AIDI的支持。git clone https://github.com/longxinH/xhprof
cd xhprof/extension/
phpize
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303./configure
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
config.status: config.h is unchangedmake && make install
Don't forget to run 'make test'.php --ini
Loaded Configuration File: /usr/local/etc/php/7.1/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d
Additional .ini files parsed: /usr/local/etc/php/7.1/conf.d/ext-opcache.inicat /usr/local/etc/php/7.1/php.ini | grep extension_dir
; extension_dir = "ext"
; Be sure to appropriately set the extension_dir directive.
;sqlite3.extension_dir =cp /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/xhprof.so /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/
vim /usr/local/etc/php/7.1/php.ini
[xhprof]extension=xhprof.soxhprof.output_dir=/data/www/xhprof/save_output_dir
brew info [email protected]
To have launchd start [email protected] now and restart at login: brew services start [email protected], if you don't want/need a background service you can just run: php-fpm
brew services restart [email protected]
Stopping `[email protected]`... (might take a while)==> Successfully stopped `[email protected]` (label: [email protected])==> Successfully started `[email protected]` (label: [email protected])
php -m | grep xhprof
mkdir -p /Users/song/mycode/work/test
cp -r xhprof/xhprof_html /Users/song/mycode/work/test/cp -r xhprof/xhprof_lib /Users/song/mycode/work/test/
/usr/local/etc/nginx/nginx.conf
server { listen 80; server_name test.localhost; root /Users/song/mycode/work/test; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?$query_string; } 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; } }
127.0.0.1 test.localhost
vim /Users/song/mycode/work/test/test.php
save_run($xhprof_data, "xhprof_foo");echo "\nhttp://test.localhost/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n";
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号