查看php网站瓶颈,使用XHProf查找PHP性能瓶颈

news/2024/5/20 11:09:59/文章来源:https://blog.csdn.net/weixin_33514277/article/details/116250767

XHProf是facebook 开发的一个测试php性能的扩展,本文记录了在PHP应用中使用XHProf对PHP进行性能优化,查找性能瓶颈的方法。

安装Xhprof扩展

$ wget http://pecl.php.net/get/xhprof-0.9.4.tgz

$ tar -zxvf xhprof-0.9.4.tgz

$ cd xhprof-0.9.4

$ cd extension/

$ phpize

$ ./configure

$ make

$ sudo make install

修改php.ini

[xhprof]

extension=xhprof.so

xhprof.output_dir=/tmp

配置中xhprof.output_dir指定了生成的profile文件存储的位置,我们将其指定为/tmp。

对PHP进行性能分析

在XHProf扩展中,一共提供了四个函数用于对PHP进行性能分析。

xhprof_enable/xhprof_sample_enable函数用于开始XHProf性能分析,区别在于前者功能更加强大,而后者则是是以简单模式启动性能分析(简单记录了函数的调用栈信息),开销比较小。

xhprof_disable/xhprof_sample_disable函数用于停止性能分析,并返回分析的数据。

需要特别说明的函数是xhprof_enable,其他函数都是不需要提供参数的,而该函数则可以接受两个可选的参数,用于改变该工具的行为。

void xhprof_enable ([ int $flags = 0 [, array $options ]] )

flags 该参数用于为剖析结果添加额外的信息,该参数的值使用以下宏,如果需要提供多个值,使用|进行分隔。

XHPROFFLAGSNO_BUILTINS 跳过所有的内置函数

XHPROFFLAGSCPU 添加对CPU使用的分析

XHPROFFLAGSMEMORY 添加对内存使用的分析

options 数组形式提供可选参数,在此处提供ignored_functions选项需要忽略的函数

比如下面的例子,同时对内存和CPU进行分析,并且忽略对call_user_func和call_user_func_array函数的分析。

xhprof_enable(

XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU,

[

'ignored_functions' => [

'call_user_func',

'call_user_func_array'

]

]

);

// 这里是PHP代码,比如业务逻辑实现等要被分析的代码部分

....

$xhprofData = xhprof_disable();// $xhprofData是数组形式的分析结果

print_r($xhprofData);

注意,如果使用XHPROF_FLAGS_CPU选项对CPU占用也进行分析,在Linux环境下,会造成比较高的系统负载,因此不建议使用,而推荐只使用XHPROF_FLAGS_MEMORY,对内存的分析不会对系统造成太多负载。

形象化的查看分析结果

使用xhprof_disable完成性能分析并且获取到分析结果之后,我们通常不会直接输出结果,因为这样的结果是以数组形式组织的,看起来并不直观,幸运的是,xhprof提供了基于web的图形界面对分析结果进行查看。

在使用之前,请先确保服务器安装了graphviz工具,否则在生成监控图表的时候回出现以下错误:

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

这里提示找不到dot命令,所以需要先安装graphviz

$ sudo yum install graphviz

由于分析结果的查看工具是基于web的,因此,我们需要将xhprof安装包中的xhprofhtml和xhproflib目录放到服务器的web目录下,让xhprof_html目录中的内容对外可以访问。

比如我的测试服务器环境是使用vagrant搭建的Cent OS,我见过这两个目录放到/vagrant/xhprof目录下:

[vagrant@localhost xhprof]$ pwd

/vagrant/xhprof

[vagrant@localhost xhprof]$ ls

xhprof_html xhprof_lib

web服务器使用的是Nginx,因此,在Nginx的配置文件nginx.conf中的配置如下:

server {

listen 80;

server_name _;

root /vagrant;

...

web服务器的根目录是/vagrant,因此访问地址为http://localhost/xhprof/xhprof_html/index.php.

当然,配置好环境之后,我们还是获取不到分析结果的,因为我们在代码中并没有将分析结果保存到xhprof.output_dir指定的目录中。

因此,我们需要修改我们的代码,是其能够将分析结果存放到xhprof.output_dir指定的目录中。

....

$xhprofData = xhprof_disable();

require '/vagrant/xhprof/xhprof_lib/utils/xhprof_lib.php';

require '/vagrant/xhprof/xhprof_lib/utils/xhprof_runs.php';

$xhprofRuns = new XHProfRuns_Default();

$runId = $xhprofRuns->save_run($xhprofData, 'xhprof_test');

echo 'http://localhost/xhprof/xhprof_html/index.php?run=' . $runId . '&source=xhprof_test';

变量$runId是本次请求生成分析结果的id,最后我们输出了一个链接地址,使用改地址就可以看到本次请求的分析结果。

0818b9ca8b590ca3270a3433284dd417.png

注意到中间的View Full Callgraph链接,通过该链接我们可以看到图形化的分析结果。

0818b9ca8b590ca3270a3433284dd417.png

图中红色的部分为性能比较低,耗时比较长的部分,我们可以根据根据哪些函数被标记为红色对系统的代码进行优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_825229.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux康乐备份,Kangle(康乐)ep控制面板备份网站数据和恢复的教程

【原创版权所有】其他拓展文章:强烈推荐!如果大家希望自动备份并异地保存数据,请访问KOS工具箱 – Kangle EP云备份:KOS云备份,是KOS工具箱推出的第一款付费服务。它可以帮助您每日自动备份Kangle EP所有主机数据。并且…

CSU前端网站 +登陆系统

实现CSU网站主页,并设计实现一个简单全栈登陆系统 实现要求短信验证码实现:臻子云关键功能解析运行结果实现要求 1)前端页面的基本布局 布局类似于学校门户顶部需有 LOGO 栏目;提供轮播图;提供账号密码登录方式&…

Linux中搭建静态网站(练习题)

在rhel8的系统上搭建网站:该网站ip地址主机位为11,设置documentroot为/www/你的名字拼音的缩写,网页内容为:my name is… 做题思路: #面对这类的题目,确定好做题思路: #配置题目要求的IP地址关…

搭建https的静态网站

搭建一个基于https://www.zuoye.com访问的web网站,网站首页在/www/https/,内容为exercise。 思路: #思路:准备好https所需要的东西关闭防火墙及SElinux创建目录编写网页内容编写配置文件https相关的东西: [rootloca…

网站架构方案全解析

1、HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动…

[au3]下载css文件里的图片,保存别人的网站时有用。

;by onepc 153785587 #NoTrayIcon#Region ;**** 参数创建于 ACNWrapper_GUI ****#AutoIt3Wrapper_iconC:\windows\system32\SHELL32.dll|-123#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****#include <INet.au3>#include <ButtonConstants.au3>#include <Edit…

老鸟传经:做网站的实用建议

做网站现在似乎是每个企业或团队都必做的一项工作了——不管你所在的行业是不是和互联网相关。我平均每周都会接到一两个朋友的电话问&#xff1a;我们要做一个网站&#xff0c;该用什么技术&#xff0c;PHP、Java还是.NET&#xff1f;我们该从哪里请开发人员&#xff1f;我们现…

可以判断用户打开页面次数吗?_SEO搜索优化,你可以不做外链吗?

自从2015年谷歌建立了Rainbrain&#xff0c;利用机器学习对内容分析与判断以后&#xff0c;很多SEO专家就开始讨论一个问题&#xff0c;SEO关键词排名&#xff0c;我们是不是可以不需要发布链接了&#xff0c;虽然百度也在一度强调&#xff1a;我们将逐渐摒弃技术排名的方法&am…

python抓取网站图片_实例详解Python实现简单网页图片抓取

本文主要介绍了Python实现简单网页图片抓取完整代码实例&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。 利用python抓取网络图片的步骤是&#xff1a; 1、根据给定的网址获取网页源代码 2、利用正则表达式把源代码中的图片地址过滤出来 3、根据过滤出来的图片…

大表多表关联查总数如何优化_咻咻SEO:网站上线前检查哪些内容,如何处理

前期准备工作&#xff1a;已完成站内优化可参考相关文章&#xff1a;一休&#xff1a;咻咻SEO&#xff1a;当网站收录不好&#xff0c;或兼职网站优化&#xff0c;开始优化前如何评测网站&#xff1f;​zhuanlan.zhihu.com网站上线前URL结构怎样优化&#xff1f;什么样的结构是…

用一朵云重建软件开发者的声望——讲述iTechTag网站的故事

&#xff08;本文发表于《程序员》2007年12期&#xff09; &#xff08;本文发表之后&#xff0c;iTechTag又有了较大的变化&#xff0c;请看 http://www.itechtag.com/feeds/46/blogs/92 &#xff09; 用一朵云重建软件开发者的声望 ——讲述iTechTag网站的故事 在接受In…

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

开篇语&#xff1a;最近在弄ocx控件发布到asp.net网站上使用&#xff0c;就是用户在使用过程中&#xff0c;自动下载安装ocx控件。&#xff08;此文章也是总结了网上好多人写的文章&#xff0c;我只是汇总一下&#xff0c;加上部分自己的东西&#xff0c;在这里感谢所有在网上发…

wp.qq.com set.html,WordPress网站设置第三方软件登录

WordPress网站当需要用户方便登录时&#xff0c;那么使用QQ、微信、微博这类第三方的信用软件登录不仅便捷也安全&#xff0c;那么该怎样为WordPress网站设置 第三方软件登录的方法呢&#xff1f;以下为具体设置内容&#xff1a;要想在互联网上登录&#xff0c;必须取得唯一id&…

大型网站架构阅读(一)架构演变

大型网站系统特点&#xff1a; 高并发&#xff0c;大流量 高可用&#xff0c;海量数据 用户分布式广泛&#xff0c;网络情况复杂&#xff0c;安全环境恶劣&#xff0c;需求快速变更&#xff0c;发布频繁&#xff0c;渐进式发展。 大型网站演变过程&#xff1a; 大型网站是从小网…

大型网站架构阅读(二)架构模式

1.网站架构模式简介&#xff1a; 随着网站架构的逐渐演变&#xff0c;在其为了解决高并发访问&#xff0c;海量数据处理&#xff0c;高可靠运行等问题&#xff0c;大型互联网公司提出了很多解决方案&#xff0c;这些解决方案逐渐形成了大型网站架构模式。 2.分类&#xff1a; …

大型网站架构阅读(四)网站架构高性能

网站性能&#xff1a; 网站性能是客观的指标,可以具体体现到响应时间、吞吐量等技术指标,同时也是主观的感受,而感受则是一种与具体参与者相关的微妙的东西,用户的感受和工程师的感受不同,不同的用户感受也不同。 1.不同角度下的网站性能&#xff1a; 用户视角的网站性能 …

大型网站架构阅读(五)网站架构高可用

可用性概述&#xff1a; 网站的可用性( Availability)描述网站可有效访问的特性(不同于另一个网站运营指标: Usability,通常也被译作可用性,但是后者强调的是网站的有用性,即对最终用户的使用价值),相比于网站的其他非功能特性,网站的可用性更牵动人们的神经,大型网站的不可用事…

大型网站架构阅读(六)网站架构伸缩性

网站伸缩性设计&#xff1a; 1.网站的伸缩性&#xff1a;不需要改变网站的软硬件设计&#xff0c;仅仅通过改变部署的服务器就可以扩大或者缩小网站的服务处理能力。 2.分为两类&#xff1a; 一 类是根据功能进行物理分离实现伸缩&#xff0c; 一类是单一功能通过集群实现伸缩。…

大型网站架构阅读(七)网站架构可扩展性

扩展性( Extensibility) 指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。它是系统架构设计层面的开闭原则(对扩展开放,对修改关闭),架构设计考虑未来功能扩展,当系统增加…

大型网站架构阅读(八)网站架构安全性

随着网络技术的不断发展&#xff0c;实体交易逐渐的扩展位网上交易&#xff0c;这位很多大型互联网公司提功能很多赚钱的门道&#xff0c;网上各种平台铺天盖地适应这种趋势&#xff0c;但是&#xff0c;网络交易的安全性成为了各大互联网公司的重中之重。 常见的网络攻击手段…