手机版

基于在生产环境中使用php性能测试工具xhprof的详细说明

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

Xhprof是来自facebook的开源php性能测试工具,也可以称为profile tool。我不知道如何翻译这个词才能更令人满意。与之前使用过的xdebug相比,有很多相似之处。之前有一些xdebug的记录供参考,但是它的缺点是对性能影响很大。即使打开profiler_enable_trigger参数,在生产环境中使用也很可怕,cpu会立即上升到高位。另一方面,Xhprof非常轻量级,是否录制profile可以由程序控制,因此可以在生产环境中使用。在其文档中,您可以看到这样的用法:xhprof以1/10,000的概率启用,并且通常情况下,它不会安静地拍摄。复制代码如下:IF (mt _ rand (1,10000)=1){ xh prof _ enable(xh prof _ flags _ memory);$ xhprof _ on=true}在程序结束时,调用方法保存概要文件副本代码如下: if($ xh prof _ on){//stop profiler $ xh prof _ data=xh prof _ disable();//将$ xhprof _ data保存在某个地方(比如中央数据库).}还可以使用register_shutdown_function方法指定在程序结束时保存xhprof信息,从而避免了在结束时进行判断。举一个不完整的重写例子:复制代码如下: if (mt _ rand (1,10000)=1){ xh prof _ enable(xh prof _ flags _ memory);register _ shut down _ function(create _ function(',' $ xh prof _ data=xh prof _ disable();保存$ xhprof _ data'));}至于日志,我暂时以最土的文件形式保存,定期清理。BTW:xhprof生成的图形模式配置文件真的很酷,哪段代码成为瓶颈一目了然。作者:phpe:以下是一个例子:

关于提高xhprof使用率的设想自从xhprof去年在生产环境中使用以来,给生产环境中的程序调试和性能优化带来了很多便利。但是在使用过程中,还是有一些细节需要改进。问题xhprof的概要日志直接以文件的形式保存在生产服务器上,需要定期清理,或者收集后移动到工具中查看日志。由于xhprof生成的profile是一个大数组,保存到文件时使用标准的php serialize,日志文件太大,不小心很容易占用大量服务器磁盘空间。查看日志列表时,很难一一查看。针对这些问题,我有一些小想法。日志存储和部署中央日志服务器,使用facebook的抄写员收集日志。生产环境中服务器生成的xhprof日志写入scribe客户端,客户端自动同步到中央日志服务器中的scribe,不占用本地存储空间。代码改动比较小,只要基于iXHProfRuns接口实现一个XhprofRuns类,save_run方法的存储方式可以调整。默认情况下,替换序列化方法xhprof将在用php的本机序列化方法处理后保存概要信息。在前两天,我比较了iBinary vs Serialize vs JSON _ Encode的性能和占用的字节数。在这次测试中,iBinary在各个方面都有一定的优势,尤其是占用的存储空间会大大减少,所以我只需要将序列化方式改为igbinary_serialize即可。优化列表显示。我已经厌倦了一个个看侧写日志的大图。费时费力,还没有针对性。因此,我现在做的是直接将前1000个日志的总执行时间输出到概要文件日志列表中的列表中,执行时间过长的日志用红色粗体标记。做了这个小改动后,当我想检查操作时,只需要打开日志列表中的红色链接,真的省时省力。如何从xhprof日志文件中获取执行时间?简单代码如下:复制代码如下:/***从xhprof获取执行时间log ** @param string $log xhprof日志文件路径* @return int执行时间*/函数getspentime($ log){ $ profile=unserialize(file _ Get _ contents($ log));返回$ profile[' main()'][' wt ']/1000;}

版权声明:基于在生产环境中使用php性能测试工具xhprof的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。