应用程序以查找诊断和加速运行缓慢的代码

上传人:jiups****uk12 文档编号:90663447 上传时间:2019-06-14 格式:DOCX 页数:12 大小:15.30KB
返回 下载 相关 举报
应用程序以查找诊断和加速运行缓慢的代码_第1页
第1页 / 共12页
应用程序以查找诊断和加速运行缓慢的代码_第2页
第2页 / 共12页
应用程序以查找诊断和加速运行缓慢的代码_第3页
第3页 / 共12页
应用程序以查找诊断和加速运行缓慢的代码_第4页
第4页 / 共12页
应用程序以查找诊断和加速运行缓慢的代码_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《应用程序以查找诊断和加速运行缓慢的代码》由会员分享,可在线阅读,更多相关《应用程序以查找诊断和加速运行缓慢的代码(12页珍藏版)》请在金锄头文库上搜索。

1、PHP 应用程序以查找、诊断和加速运行缓慢的代码用Xdebug分析PHP应用程序以查找、诊断和加速运行缓慢的代码2011-06-21 14:26From:如果PHP应用程序运行缓慢,可以使用分析器找出应用程序究竟在哪些方面浪费了时间。可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。为PHP应用提速、提速、再提速!系列文章的第1部分演示了如何使用XCache(PHP操作码缓存)加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变化,缓存

2、后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。操作码缓存-以及一个操作码优化器,通常由相同的包提供-是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。当然,在某些应用程序中,相比较实际的执行时间,将PHP源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的SQL语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助。但是,如果代码运行

3、缓慢,您可能更希望自己处理。但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智-因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。一个简单的性能指标是挂钟时间(wall clock time),或测量页面请求与完成呈现之间的实际延迟。对于某些情况-比如在您自己的工作站本地运行的Web服务器、数据库和浏览器-挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、活动的Web服务器或者活动的数

4、据库。一种更精确的测量-甚至可以测量运行单个源代码语句的时间-可以采用代码分析器。分析器通常被实现为PHP运行时引擎的扩展,记录语句开始和结束的delta、记录程序开始和结束之间的delta并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。PHP的一个较流行的分析器是Xdebug,它还为交互地调试PHP应用程序提供了服务器挂钩(hook)。(参见调试的更好方法以了解更多信息。该系列的另一部分将探讨高级交互式调试。)Xdebug很容易从源代码构建,将

5、其作为Zend扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于PHP页面的每个请求都将生成可在KCacheGrind中查看的数据集。如果具备了PHP实用工具phpize和php-config,而且具有对系统的php.ini配置文件的访问权,那么安装和设置Xdebug只需几分钟的时间。下面给出的指导说明针对Linux,不过在Mac OS X上的安装步骤实际上与此类似。(您可以从Xdebug Web站点找到针对MicrosoftWindows的Xdebug预编译版本。)Xdebug的最新版本为V2.0.0RC3(最终版本V2.0.0在您阅读此文时也许已经可用)。下载并

6、解包tarball,然后切换到源代码的子目录。确保phpize和php-config位于shell的PATH,准备使用phpize进行构建。$wget tar xzf xdebug-2.0.0RC3.tgz$cd xdebug-2.0.0RC3/xdebug-2.0.0RC3$phpize Configuring for:PHP Api Version:20020918 Zend Module Api No:20020429 Zend Extension Api No:20050606 phpize的产品是一个脚本-名为配置-它对余下的构建过程进行配置。要构建Xdebug,在make后紧接着输

7、入./configure即可。$./configure checking build system type.i686-apple-darwin8.8.1 checking host system type.i686-apple-darwin8.8.1 checking for egrep.grep-E.$make.Build complete.(It is safe to ignore warnings about tempnam and tmpnam).make命令生成Xdebug扩展,xdebug.so。剩下的工作就是使用sudo make install进行安装。$sudo make

8、install Installing shared extensions:/usr/lib/php/extensions/no-debug-non-zts-20020429/注:如果在终端窗口中运行最后一个命令,请选择并复制最后一步中发出的目录。在下一个步骤中将会用到它。最后,要使配置数据可视化,必须使用KCacheGrind和GraphViz。包含K Desktop Environment(KDE)的Linux发行版很可能已经含有了KCacheGrind和GraphViz。如果没有包含,适合您所使用的Linux的那些版本也不难找到。Debian用户可以使用Advanced Packaging

9、 Tool(APT)快速安装KCacheGrind和GraphViz以及所有包的依赖关系。$apt-cache search kcachegrind valgrind-callgrind-call-graph skin for valgrind kcachegrind-visualisation tool for valgrind profiling output kcachegrind-converters-format converters for KCachegrind profiling visualisation tool$apt-cache search graphviz grap

10、hviz-rich set of graph drawing tools graphviz-dev-graphviz Libs and Headers against which to build applications graphviz-doc-additional documentation for graphviz libdeps-renderer-dot-perl-DEPS renderer plugin using GraphViz/dot.$sudo apt-get install kcachegrind graphviz.如果没有将KDE安装到系统中,KCacheGrind、G

11、raphViz以及所有必要的内容将占用大约90 MB的磁盘空间。安装了Xdebug扩展后,就可以准备启用和配置该扩展了。在文本编辑器中打开php.ini,并添加以下代码行。zend_extension=/usr/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so xdebug.profiler_output_dir=/tmp/xdebug/xdebug.profiler_enable=Off xdebug.profiler_enable_trigger=1第一行zend_extension加载Xdebug扩展。第二行命名放置分析器输出的

12、目录。如果需要的话,创建命名的目标并更改其模式以允许用户对Web服务器进行写访问。第三行禁用了分析器。然而,第四行将在设置HTTP GET或POST参数XDEBUG_PROFILE时启用分析器。(如果您希望一直使用分析器,在第三行代码中将Off更改为On。)添加这几行代码并验证了输出目录是可写的,然后重新启动Web服务器。对于其他PHP扩展,要验证Xdebug是否安装并可用,可以创建一个简单的骨架PHP程序来调用phpinfo()并查看结果。应该能够看到类似于图1所示的内容。(为简便起见,省略了完整输出的部分内容。)图1.Phpinfo指明Xdebug是否已安装您还可以向下滚动到Zend徽标。

13、如果正确安装并配置了Xdebug,它将显示在徽标的旁边。要分析代码,只需将浏览器指向PHP应用程序即可。如果您将分析器设置为对每个触发逐个解决的方式,将XDEBUG_PROFILE=1追加到URL中,或者,像下面一样,将参数嵌入到表单中。作为一个示例,我们来分析一下这个简单的ACME Fibonacci Maker,fibonacci.php,如清单5所示。为方便起见,将XDEBUG_PROFILE参数设置在表单的隐藏变量内。(当代码投入生产时,很可能将禁用Xdebug,呈现这个变量将不会造成什么损失。)?php function fib($nth=1)if($nth 2)return($nt

14、h);return(fib($nth-1)+fib($nth-2);?html head title ACME Fibonacci Maker/title/head body h2 Try the ACME Fibonacci Maker!/h2 form action=fibonacci.phpmethod=POSTinput type=hiddenname=XDEBUG_PROFILEvalue=1/Enter anumber:input type=textname=n/input/form hr/?php if(!empty($_REQUESTn)$n=$_REQUESTn%10;$su

15、ffix=array(1=st,2=nd,3=rd);if($_REQUESTn4|$_REQUESTn20)$suffix=$suffix$n;else$suffix=th;echop The.$_REQUESTn.$suffix.Fibonacci number is;echo fib($_REQUESTn)./p;?/body/html将浏览器指向(或者合适的URL)并输入数字-比如,16。其结果-Fibonacci系列的第16个元素-如图2所示。图2.示例Fibonacci应用程序如果将分析器输出目录中的内容(名为php.ini)列出来的话,应该能看到类似cachegrind.out.951917687这样名称的文件。cachegrind.out.前缀是固定的。默认情况下,数值后缀是目录路径到fibonacci.php文件的CRC32散列。因此,如果每一个应用程序都位于自己的目录,那么每个程序的输出将根据文件名而被分隔。(如果您更喜欢将输出与时间相关联,将下面这行代码:xdebug.profiler_output_name=timestamp添加到php.ini。)从终端窗口启动KCacheGrind并打开cachegrind.out.951917687。将立即打开一个类似于图3的新窗口。图3.KCacheGri

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号