在生产中评测慢速PHP页面

在生产中评测慢速PHP页面,php,performance,profiling,Php,Performance,Profiling,有没有办法只分析生产服务器上的慢速页面 目前,我们正在将慢速页面记录到一个文本文件中,但如果没有更多信息,很难说为什么它们会慢速(不是一直慢速) 我以前使用过探查器,但我真的不想在我们的生产服务器上启用它,因为我们可能每秒收到100个请求。我也用过,但我真的不想再安装了。您可以编写计时器语句,这些语句是慢速页面的一部分,可以缩小它的范围。然后,一旦建立了一些数据,冲洗并重复 define('START_TIME', microtime(true)); function timer() {

有没有办法只分析生产服务器上的慢速页面

目前,我们正在将慢速页面记录到一个文本文件中,但如果没有更多信息,很难说为什么它们会慢速(不是一直慢速)


我以前使用过探查器,但我真的不想在我们的生产服务器上启用它,因为我们可能每秒收到100个请求。我也用过,但我真的不想再安装了。

您可以编写计时器语句,这些语句是慢速页面的一部分,可以缩小它的范围。然后,一旦建立了一些数据,冲洗并重复

define('START_TIME', microtime(true));
function timer() {
    static $last;
    $time_since_start = microtime(true) - START_TIME;
    $time_since_last = microtime(true) - $last;
    // Do something with $time vars
    $last = microtime(true);
}
另外,请查看以下内容:


它可能适合您的需要

我对生产服务器的全新库持怀疑态度。调试时,我喜欢在php.ini中使用*auto_prepend_file*和*auto_append_file*指令。使用此方法,您可以很容易地按照上面的建议进行操作,并获得每个页面加载的精确时间

如果您只担心以秒为单位的缓慢加载页面,那么这里有一个快速而肮脏的解决方案,它可以从自动附加文件中的大致完成时间中减去服务器请求时间。然后可以将结果存储在db或平面文件中

例如在php.in中

auto_append_file = [location]/my_timer.php
my_timer.php

define('TRIGGER_TIME_LOG','3'); // Minimum number of timer seconds to log page load 

$time = time() - $_SERVER['REQUEST_TIME']; // Page load time

if($time >= TRIGGER_TIME_LOG)
{
  /*
   * DO LOGGING TO DB OR FLAT FILE HERE
   */
}

我建议你看一看这本书。您可以激活每个查询的评测,这可能允许您从生产服务器获取评测数据,而不会对性能造成巨大影响


我希望这将对您有所帮助

我知道这不是最好的解决方案,但是


您可以创建一个助手类来记录您拥有的每个进程以及开始和结束时间。我知道您已经在整个过程中这样做了,但是对于每个函数的开始和结束,您可以添加一个“Profiler::logtime(FUNC)”

您可以更改Apache/HTTP服务器日志,以记录服务每个请求所花费的时间。举个例子。然后,您可以收集每个请求所需时间的数据,确定缓慢的页面/请求,并使用或进一步分析原因


很简单,而且对生产服务器没有太大的消耗。

正如我所说,我们已经记录了慢页面,我只需要更多细节(比如哪些函数慢)。PQP看起来不错,但它并没有真正提供我想要的细节。无论如何,谢谢。如果您使用的是mysql,请确保“慢速查询日志”处于活动状态。问题是我们不知道慢速运行在哪里。我们真的需要像Zend Platform那样识别慢速页面的东西,但不需要每年花费数千美元。太棒了,评论中有一个链接指向mod log firstbyte,它应该记录到apache日志处理时间。我不能说我想到了这一点,但最好只记录服务器本身为资源提供服务所花费的时间。