手机版

用XHProf和XHGui分析Linux系统下PHP运行性能

时间:2021-09-20 来源:互联网 编辑:宝哥软件园 浏览:

什么是性能分析?性能分析在代码级别衡量应用程序的相对性能。性能分析要捕获的事件包括CPU使用情况、内存使用情况、函数调用持续时间和次数以及调用图。性能分析的行为也会影响应用程序的性能。什么时候应该进行性能分析?在考虑是否执行性能分析时,首先应该思考:应用程序是否存在性能问题?如果是,你要进一步考虑:这个问题有多大?

如果不这样做,就会陷入过早优化的陷阱,可能会浪费时间。

为了判断应用程序是否有性能问题,您应该设置性能目标。例如,100个并发用户的响应时间小于1s。然后,你需要进行基准测试,看看你能否实现这个目标。一个常见的错误是在开发环境中进行基准测试。事实上,您必须在生产环境中进行基准测试。(实际生产环境还是模拟生产环境,后者在SaaS容易实现。有很多产品用于基准测试,包括ab、围攻和JMeter。个人比较喜欢JMeter的特性集,但是ab和围攻更容易使用。

一旦您确定应用程序有性能问题,您需要分析它的性能,实现改进,然后再次进行基准测试,看看问题是否得到解决。每次更改后,您都应该进行基准测试来查看效果。如果您进行了大量更改,但发现应用程序性能下降,您无法确定是哪个更改导致了问题。

下图是我定义的性能生命周期:

2015128164631254.png  (18081620)

性能下降的常见原因性能下降的一些常见原因非常出乎意料。即使在像PHP这样的高级语言中,代码的质量也很少是问题的根源。在今天的硬件配置中,CPU很少是性能限制的原因。常见的原因反而是:

数据存储

PostgreSQL MySQL Oracle MSSQL MongoDB Riak Cassandra Memcache Couch DB Redis外部资源。

API文件系统、网络接口、外部进程、坏代码,选择哪个性能分析器?在PHP世界中,有两个不同的性能分析器——主动和被动。

主动VS被动性能分析主动分析器在开发过程中使用,由开发人员启用。主动分析器收集的信息比被动分析器多,这对性能的影响更大。通常,主动分析器不能在生产环境中使用。XDebug是一个活动的分析器。

由于有源分析仪不能在生产环境中使用,脸书推出了无源分析仪——XHProf。XHProf是为在生产环境中使用而构建的。它对性能的影响极小,并收集足够的信息来诊断性能问题。XHProf和OneAPM都是无源分析仪。

通常,XDebug收集的额外信息对于一般的性能问题分析来说是不必要的。这意味着即使在开发环境中,被动分析器也是持续性能分析的更好选择。

由脸书开发的xhpuxguixhpux包括一个用于查看性能数据的基本用户界面。此外,Paul Reinheimer开发了XHGUI和一个用于查看、比较和分析性能数据的增强用户界面(UI)。

Xhprof可以由PECL安装,步骤如下:

$ pecl install xhprof-beta这个pecl命令将尝试自动更新您的php.ini设置。使用以下命令可以找到pecl试图更新的文件:

$ pecl config-get php_ini它将在指定文件(如果有)的顶部添加一个新的配置行。你可能想把它们移到更合适的位置。

一旦编译了扩展,就必须启用它。为此,您需要向PHP INI文件中添加以下代码:

使用[xhprof]extension=xhprof.so,可以很容易地结合XHGui进行性能分析和检查。

要安装XHGui来安装XHGui,必须直接从git获取。这个项目可以在https://github.com/perftools/xhgui.的github上找到

XHGui需要:

PHP 5.3 ext/mongo composer MongoDB(如果只需要采集数据,可以选择也可以不选;如果需要数据分析,那是必须的。)首先,将项目克隆到任意位置。在基于Debian的Linux系统上(比如Ubuntu等。),可能是/var/www。在Mac OS X上,可能是/Library/WebServer/Documents。

$ CD/var/www $ git clone https://github.com/perftools/XHGui.git$ CD xhgui $ PHP install.php最后一个命令是运行composer来安装依赖项并检查xhgui缓存目录的权限。如果失败,您可以手动运行composer install。

接下来,您可能需要创建一个配置文件。这个步骤很容易实现,可以使用/path/to/xh GUI/config/config . default . PHP下的默认配置文件。

如果您在没有身份验证的情况下在本地运行MongoDB,您可能不需要这样做。因为它会回落到默认值。在多服务器环境中,您将需要一个远程MongoDB服务器,所有服务器都可以在其中正确存储和配置它。

为了提高MongoDB的性能,您可以运行以下指令来添加索引:

$ mongo使用xh profidb . results . ensureindex({ ' meta。SERVER . REQUEST _ TIME ' :-1 })db . results . ensureindex({ ' profile . main()。wt ' :-1 })db . results . ensureindex({ ' profile . main()。mu ' :-1 })db . results . ensureindex({ ' profile . main()。cpu' : -1 })其他配置:db . results . ensureindex({ ' meta . URL ' : 1 })如果不想在生产环境中安装mongo,或者不能让Web服务器访问mongo服务器,可以将性能分析数据保存在磁盘上,导入到本地MongoDB中进行后期分析。

因此,请在config.php中进行以下修改:

?php 'save.handler'='file ',' save . handler . filename '='/path/to/xh GUI/xh prof-'。uniqid(',true)。dat ',更改文件中的save.handler,然后取消save.handler.filename的注释,并为其分配适当的值。

注意:默认情况下,每天只保存一个分析文件。

分析数据准备就绪后,您可以使用XHGui附带的脚本导入它:

$ PHP/path/to/xh GUI/external/import . PHP/path/to/file . dat这之后的步骤是一样的。

运行XHGuiXHGui是一个基于PHP的Web应用程序。您可以使用/path/to/xhgui/webroot作为根文件来设置标准虚拟主机。

或者,您可以简单地使用PHP 5.4 cli-server,如:

$ CD/path/to/XHGui $ PHP-s 0:8080-t web root/这将使XHGui能够通过所有网络接口上的端口8080进行通信。要运行性能分析器,您需要在所有要分析的页面中包含external/header.php脚本。为此,您可以在PHP ini文件中设置auto_prepend_file。您可以直接在公共INI文件中设置它,也可以将其限制在单个虚拟主机上。

对于Apache服务器,添加以下代码:

PHP _ admin _ value auto _ prepend _ file '/path/to/xh GUI/external/header . PHP '对于Nginx服务器,在服务器配置中添加以下代码:

fastcgi _ param PHP _ VALUE ' auto _ prepend _ file=/path/to/xh GUI/external/header . PHP ';如果使用PHP 5.4 cli-server(PHP -S),必须通过命令行标记设置:

$ PHP-s 0:8080-dauto _ prepend _ file=/path/to/xh GUI/external/header . PHP默认情况下,分析器在运行时只分析(大约)1%的请求。这是由以下外部/header.php代码控制的:

?php if (rand(0,100)!==42){ return;}?如果您想要分析每个请求(例如,在开发阶段),您可以注释掉这段代码。如果您想分析10%的请求,可以进行以下更改:

?phpif (rand(0,10)!==4){ return;}?这允许您分析少量用户请求,而不会影响单个用户或太多用户。

如果要在性能分析期间执行手动控制,可以这样做:

?php if(!isset($ _ REQUEST[' a9v 3xunkx3aeinsudzv '])!isset($ _ COOKIE[' a9v 3xunkx3aeinsudzv ']){ return;} else { //从REQUEST _ URI $ _ SERVER[' REQUEST _ URI ']=str _ replace(array('?a9v 3xusnkx3aeinsudzv ',' a9v 3xusnkx3aeinsudzv '),'',$ _ SERVER[' REQUEST _ URI ']);setcookie(' a9v 3xusnkx3aeinsudzv ',1);} if(isset($ _ REQUEST[' no-a9v 3xusnkx3aeinsudzv ']){ setcookie(' a9v 3xusnkx3aeinsudzv ',0,time()-86400);返回;}?这段代码将检查一个随机命名的GET/POST/COOKIE变量(本例中为:A9v3XUsnKX3aEiNsUDZzV),并创建一个同名的COOKIE,可以用来分析请求的整个过程,比如表单提交后的重定向、Ajax请求等等。

此外,它允许一个名为no-a9v 3xunkx3aeinsudzv的GET/POST变量删除Cookie并停止分析。

当然,我们欢迎您尝试OneAPM,为您的PHP和Java应用程序做免费的性能分析。OneAPM独特的探针可以深入所有PHP和Java应用程序,完成应用程序性能管理和监控,包括代码级性能问题的可见性、性能瓶颈的快速识别和跟踪、真实用户体验监控、服务器监控和端到端应用程序性能管理。OneAPM可以追溯到性能差的SQL语句、性能差的第三方API、Web服务、Cache等的Traces记录。

版权声明:用XHProf和XHGui分析Linux系统下PHP运行性能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。