当前位置:首页 > 新闻中心 > 互联网动态
巧用工具进行php性能分析责任编辑 :李飞    文章来源 :星翼创想(www.iswweb.com)    发布时间 :2015-09-21    阅读次数:985


性能分析是衡量应用程序在代码级别的相对性能。性能分析将捕捉的事件包括:CPU的使用,内存的使用,函数的调用时长和次数,以及调用图。性能分析的行为也会影响应用性能。


影响的程度取决于基准测试。基准测试在外部执行,用于衡量应用真实性能。所谓真实性能,即终端用户所体验的应用表现。


什么时候应该进行性能分析?

在考虑是否进行性能分析时,你首先要想:应用是否存在性能问题?如果有,你要进一步考虑:这个问题有多大?

如果你不这样做,将会陷入一个陷阱——过早优化,这可能会浪费你的时间。

为了评断应用是否存在性能问题,你应该确定性能目标。例如,100个并发用户的响应时间小于1s。然后,你需要进行基准测试,看是否达到这个目标。一个常见的错误是,在开发环境进行基准测试。事实上,你必须在生产环境进行基准测试。(实际生产环境或模拟的生产环境,后者很容易在 SaaS 实现

用于基准测试的产品很多,包括 ab,siege 和 JMeter。我个人比较喜欢JMeter的功能集,但 ab 和 siege 更加易用。

一旦你确定应用存在性能问题,就需要分析其性能,实施改进,然后再一次进行基准测试,查看问题是否解决。每一次变更之后,你都该进行基准测试查看效果。如果你做了很多变更,却发现应用性能有所下降,你就无法确定具体是哪一次变更导致了这个问题。

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

性能下降的一般原因

导致性能下降的一般原因中,有些相当出人意料。即便是像 PHP 这样的高级语言,代码的好坏也很少是问题的根源。在当今的硬件配置条件下,CPU 很少是性能限制的原因。常见的原因反而是:
数据存储
  • PostgreSQL
  • MySQL
  • Oracle
  • MSSQL
  • MongoDB
  • Riak
  • Cassandra
  • Memcache
  • CouchDB
  • Redis
外部资源
  • APIs
  • 文件系统
  • 网络接口
  • 外部流程
糟糕的代码

选择哪一种性能分析器?

在 PHP 世界里,有两个截然不同的的性能分析器——主动和被动。

主动 VS 被动性能分析

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

因为无法在生产环境中使用主动分析器,Facebook 推出了一个被动分析器——XHprof。XHprof 是为了在生产环境中使用而打造的。它对性能的影响最小,同时收集足够的信息用于诊断性能问题。XHprof 和 OneAPM 都是被动分析器。

通常,Xdebug 收集的额外信息对于一般的性能问题分析并不必要。这意味着,被动分析器是用于不间断性能分析的更佳选择,即使是在开发环境中。

Xhprof + Xhgui

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

安装

安装 XHPROF
Xhprof 可通过 PECL 安装,步骤如下:
$pecl install xhprof-beta
该 pecl 命令将尝试自动更新你的 php.ini 设置。pecl 尝试更新的文件可以使用以下命令找到:
$ pecl config-getphp_ini
它会在指定的文件(如果有的话)顶部增加新的配置行。你可能想把他们移到一个更合适的位置。
一旦你编译了该扩展程序,您必须启用它。为此,您需要在 PHP INI 文件添加以下代码:
[xhprof] extension=xhprof.so
之后,结合 Xhgui 就能轻松地执行性能分析与检查。
安装 XHGUI
安装 Xhgui,必须直接从 git 获取。该项目可以在 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/xhgui/config/config.default.php 下的默认配置文件。

如果你在本地运行 mongodb ,没有身份验证,则可能不需要这样做。因为它将回退为默认值。而在多服务器环境中,你会需要一个所有服务器都能进行存储的远程 mongodb 服务器,并进行恰当的配置。

为提高 MongoDB 的性能,你可以运行以下指令以添加索引:
$ mongo > use xhprof
db.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} )


深圳市星翼创想网络科技有限公司,给你专业的网站建设新体验!


文章转载请保留网址:http://www.iswweb.com/news/industry/1486.html