这是我的第一个问题在如此。

我有一个内部应用程序为我的公司我最近被问到维护。该应用程序是建立在PHP及其相当良好的编码(OO、数据库抽象,智者)没有什么跆拳道-ish。

问题是应用程序是 非常慢.

我怎么去找出是什么减速的程序下来?我已经优化了代码作出非常少数的数据库查询,所以我知道它是PHP code其是考虑同时执行。我需要一些工具,可以帮助我这个,需要制定一项战略,用以检查我的代码。

我可以做的检查/战略的工作,但我需要更多的PHP工具,以找出我的程序是排泄。

想法?

有帮助吗?

解决方案

我用 XDebug分析 最近,在一个类似的情况。它输出的一个完整资料的报告可读有许多共同的分析应用程序(不能给你一个名单虽然,我只是用一个附带些数据).

其他提示

作为Juan所述,xDebug是优秀的。如果你在窗户, WinCacheGrind 会让你看的报告。

看这个介绍Rasmus Lerdorf(创造者PHP)。他进入一些很好的例子测试PHP速度和寻找什么,以及一些内部,可以慢下来的东西。XDebug是一个工具,他用途。他还就一个非常坚实的一点知道什么表现成本你要到与框架。

视频:http://www.archive.org/details/simple_is_hard

幻灯片(因为这是很难看到在视频):http://talks.php.net/show/drupal08/1

有许多变量,可以影响你的应用程序的性能。我建议你不立即承担PHP的问题。

第一,如何都是你服务PHP?你有没有尝试过基本的优化的Apache或IIS本身?是的服务器忙于处理其他类型的请求?你有没有采取优势的一个 PHP code加速器?一种方法来测试服务器是否是你的瓶颈是尝试运行的应用程序在另一个服务器。

第二,性能在整个应用程序缓慢,或者它似乎只是影响某些页面?这可能给你一个指示从哪里开始分析的性能。如果整个应用程序缓慢,问题就更有可能在基础服务器/平台或与一个全球SQL query一部分的每一个请求(用户认证,例如)。

第三,你提到减少的数量SQL查询,但是对于优化现有的查询?如果您使用的是MySQL,你利用各种优势,每个存储系统?你有没有运行 解释 在你最重要的查询,以确保他们适当地编制索引?这是至关重要的查询的访问大表;较大的数据集,更多你会注意到影响穷人编制索引。幸运的是,还有许多的文章 如此一个 这解释了如何使用解释。

第四,一个常见的错误是假设数据库服务器将会自动地使用所有可利用的资源的系统。你应该检查以确保明确分配足够的资源数据库应用程序。在MySQL,例如,只要添加自定义的设置(在你我的。cnf文件)对于像关键的缓冲区,临时表格的尺寸,线并发,少缓冲池的尺寸,等等。

如果你一双重检查所有上述和仍然无法找到的瓶颈,一种代码分析器等Xdebug可以肯定的帮助。就个人而言,我喜欢Zend室分析器,但它可能不是最好的选择,除非你已经利用剩余的Zend平台堆。然而,在我的经验这是非常罕见的,PHP本身的根本原因是慢性能。通常,一个代码分析器可以帮你确定用更精密的数据库查询是罪魁祸首。

phpED(http://www.nusphere.com/products/phped.htm)也提供了巨大的调试和分析能力,并能够增加表、断点等PHP code.该综合分析器直接提供一个时间分列的每个功能的电话和类方法从内IDE。软件还使得快速一体化与火狐或即(即访问缓慢的网址浏览器,然后点击按钮配置文件或者调试).

它已经非常有助于指出在该应用程序缓慢,为了集中大多数编码的努力;并且它避免浪费时优化已经快码。具有试图Zend和食,我现在已经出售了便于使用的phpED.

铭记这两个Xdebug和phpED(有文件)将需要额外的PHP模块安装调试时,对一个网络服务器。phpED还提供(未经试验过我)一个当地调试的选择。

Xdebug档案是肯定的路要走。另一个提示-WincacheGrind是好的,但未更新。 http://code.google.com/p/webgrind/ -在浏览器可以是一个简单和快捷的选择。

机会是,虽然,它仍然是该数据库。检查有关指数,它有足够的记忆缓存尽可能多的工作的数据成为可能。

你也可以使用 APD (高级PHP Debugger).

这是相当容易做到这一工作。

$ php apd-test.php

$ pprofp -l pprof.SOME_PID

Trace for /Users/martin/develop/php/apd-test/apd-test.php
Total Elapsed Time = 0.12
Total System Time  = 0.01
Total User Time    = 0.07


         Real         User        System             secs/    cumm
%Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
--------------------------------------------------------------------------------------
71.3 0.06 0.06  0.05 0.05  0.01 0.01  10000  0.0000   0.0000            0 in_array
27.3 0.02 0.09  0.02 0.07  0.00 0.01  10000  0.0000   0.0000            0 my_test_function
 1.5 0.03 0.03  0.00 0.00  0.00 0.00      1  0.0000   0.0000            0 apd_set_pprof_trace
 0.0 0.00 0.12  0.00 0.07  0.00 0.01      1  0.0000   0.0000            0 main

有一个很好的教程中如何编制APD和作出分析: http://martinsikora.com/compiling-apd-for-php-54

ifs其大型码基尝试apc如果你不了。

http://pecl.php.net/package/APC

你也可以尝试使用register_tick_function功能在php.它告诉php电话某一功能periodcally通过了你的代码。然后您可以跟踪它的功能是目前运行的时间量之间的电话。然后你能看到什么把最多的时间。http://www.php.net/register_tick_function

我们使用Zend发展的环境(windows).我们解决了一个存储器的使用尖峰昨天通过加强通过调试器在运行过程中资源管理器,以观看的记忆/中央处理器/磁盘活动作为每一线执行。

过程浏览器: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx.

这里包括一个基本的性能分析器可以显示时间花在每个功能呼吁过网页的请求。

我使用一个组合 梨基准log4php.

在顶的剧本,我想简我创建一个对象环绕的一个 Benchmark_Timer 对象。在代码,我在 $object->setMarker("name");呼叫,尤其是在嫌疑人的代码。

包装类具有一种销毁方法,需要将信息记录并写到log4php.我通常把这个给syslog(许多服务器、集合体的一个日志上的文件的一个服务器)。

在调试,我可以看这个日志文件,看看我需要改进的事情。在以后的生产,我可以分析的记录文件和做性能的分析。

这不xdebug,但它总是给我的能力进行比较的任何两处决的代码。

你还可以看看 HA代理 或任何其他负载平衡的解决方案,如果服务器的性能下降的原因是应用程序缓慢的处理。服务器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top