使用XHGui来测试PHP性能的教程(2)

<VirtualHost *:80> ServerName example.local DocumentRoot /var/www/example/htdocs/ php_admin_value auto_prepend_file /var/www/xhgui/external/header.php <Directory /var/www/example/htdocs/> Options FollowSymLinks Indexes AllowOverride All </Directory> </VirtualHost>

一切就绪之后,你可以开始剖析网站的请求。XHGui只会剖析网站请求的1%,所以为了使XHGui获取有意义的数据,你需要让XHGui运行一段时间或者使用类似Apache Bench的测试工具批量提交一批请求。为什么在100个请求当中XHGui只会剖析一个?因为XHGui的设计初衷就是足够的轻巧以便在生产环境中使用,它不想对每一个请求产生额外的开销,1%的采样率已经能够为网站的总体流量提供较为清晰的概览。

满足数据

我使用测试虚拟机运行本文所有的示例,采用Joind.in API作为测试代码。为了产生一些流量,我将API测试案例运行了几遍。你也可以在一定负载的情况下收集数据,所以你可以在压力测试时使用XHGui,你甚至可以在上线站点中使用XHGui收集数据(听起来很疯狂,但是Facebook正式为了此应用才开发了该工具)。在向应用发送了一定的请求之后,重新访问XHGui,现在它就已经保存了一些数据:

201573145913073.png (300×210)

该图向我们展示了XHGui为我们分析的每一个请求,最新的请求排在第一位,并且为每一个请求展示了一些额外信息。这些信息包括:

    URL:请求所访问的URL

    Time:请求发起时间

    wtor: "Wall Time" –请求所经历的所有时间. 这是 "wall clock" time的简称,表示用户等待请求完成所有的时间

    cpu:花费在该请求上的CPU时间

    mu:该请求所消耗的内存

    pmu:请求处理过程中所消耗的最大内存

为了获取每一遍请求("run")更为详细的信息,你可以点击每一个请求你感兴趣的列。你可以点击URL以便获取该URL所有请求的详细信息。无论哪种方法,你都可以获取该请求更为详细的信息:

201573145938626.png (300×210)

201573145957832.png (300×210)

这是一个非常长并且非常详细的页面,所以我引用了两个截图(如果展示所有的信息将需要5个截图)。上面一幅图的左边部分展示了该请求相关的一些信息,以便帮助你跟踪这些统计信息与哪些方面有关;右边的主要部分展示了最消耗时间的各部分以及在请求过程中每个函数调用所消耗的内存。在图的下方有一个主键以表明每一栏。

第二幅图展示了该请求每一个组成部分更为详细的信息。我们可以看到每一部分调用的次数以及时间消耗,还包括CPU和内存信息。无论是inclusive还是exclusive信息都做了详细的展示:exclusive表示仅仅是该方法调用所产生的消耗;inclusive不仅包括本函数所产生的消耗,还包括本函数调用的其他函数所产生的消耗。


XHGui另一个特性是“调用图”(Callgraph),“调用图”以生动的虚拟方式展示了时间是如何消耗的:

201573150016938.png (300×210)

这很好的展示了函数调用的层次。最好的一点是,该图是可交互的,你可以拖拽以更好的查看连接;你还可以用鼠标滑过“圆环”(blob)以查看更多的信息。当你与它交互时,他会很好玩的弹回和移动,这不是一个非常重要的特性但却让我感觉非常好玩。

理解数据

拥有大量的统计数据非常重要,但是你很难知道从哪里下手。对于一个性能不如预期的页面采用如下步骤:首先,对每一个函数的exclusive CPU时间进行排序,查看最消耗时间的函数列表。分析这些耗时的函数调用并进行重构和优化。

一旦做出了修改,让剖析工具再次检验新版本的程序,测试性能的改进。XHGui内置了完美的工具以比较两次运行;点击详细信息页面右上角的“Compare this run"按钮即可。该按钮会向你展示该URL每一次测试的结果,从中选择一个你要比较的对象。对你想比较的对象,点击”compare“按钮,XHGui将会转向比较视图,如下图所示:

201573150035219.png (300×210)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f24145cd400a915c1dd619f2b1dcd139.html