在生产中配置慢速PHP页面

时间:2010-10-28 03:56:53

标签: php performance profiling

有没有办法在生产服务器上只分析慢PHP页?

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

我之前使用过Xdebug分析器,但我真的不想在我们的生产服务器上启用它,因为我们可能每秒获得100个请求。我也使用了Zend Platform,但我真的不想再安装它。

5 个答案:

答案 0 :(得分:3)

您可以更改Apache / HTTP Server日志以记录为每个请求提供服务所花费的时间。例如,请关注this guide。然后,您可以收集每个请求所用时间的数据,识别慢速页面/请求,并使用XDebugWebGrind进一步分析原因。

简单,并且不会对您的生产服务器造成太大影响。

答案 1 :(得分:2)

你可以写定时器语句是慢速页面的一部分来缩小它。然后,一旦建立了一些数据,冲洗并重复。

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);
}

另请查看:http://particletree.com/features/php-quick-profiler/

它可能适合您的需求

答案 2 :(得分:0)

我对生产服务器的全新库感到遗憾。当我调试时,我喜欢在php.ini中使用* auto_prepend_file *和* auto_append_file *指令。您可以使用此方法轻松执行上述建议,并为每个页面加载获得非常准确的时间。

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

例如在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
   */
}

答案 3 :(得分:0)

我建议你看看webgrind project。您可以激活每个查询的分析,这可能允许您从生产服务器获取分析数据,而不会对性能产生巨大影响。

我希望这会对你有所帮助

答案 4 :(得分:0)

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

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

相关问题