有没有办法在生产服务器上只分析慢PHP页?
目前我们正在将慢速页面记录到文本文件中,但是如果没有更多信息,很难说为什么它们很慢(不会一直很慢)。
我之前使用过Xdebug分析器,但我真的不想在我们的生产服务器上启用它,因为我们可能每秒获得100个请求。我也使用了Zend Platform,但我真的不想再安装它。
答案 0 :(得分:3)
您可以更改Apache / HTTP Server日志以记录为每个请求提供服务所花费的时间。例如,请关注this guide。然后,您可以收集每个请求所用时间的数据,识别慢速页面/请求,并使用XDebug或WebGrind进一步分析原因。
简单,并且不会对您的生产服务器造成太大影响。
答案 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 )”;