我正在优化我的网站,我已经让MySQL慢查询登录了几天,但在经过> 260M查询后,它只记录了6个慢查询,而那些是特殊的查询执行我在phpMyAdmin上。我想知道是否有什么东西记录缓慢的PHP页面执行时间,以便我可以找到某些占用资源的页面,而不是特定的查询。
答案 0 :(得分:10)
首先,有xdebug,它有一个分析器,但我不会在生产机器上使用它,因为它会注入代码并带来速度爬行。但非常适合测试环境。
如果您想在高效环境中测量速度,我只需手动测量。 microtime()
是PHP中这些东西的功能。假设你有一个header.php和一个footer.php,它被所有 php脚本调用:
# In your header.php (or tpl)
$GLOBALS['_execution_start'] = microtime(true);
# In your footer.php (or tpl)
file_put_contents(
'/tmp/my_profiling_results.txt',
microtime(true) - $GLOBALS['_execution_start'] . ':' . print_r($_SERVER, true) . "\n",
FILE_APPEND
);
答案 1 :(得分:5)
auto_prepend_file和auto_append_file怎么样, 刚刚写了一篇关于它的帖子http://blog.xrado.si/post/php-slow-log
答案 2 :(得分:4)
您可以将脚本包装在一个简单的计时器中,如下所示:
/*in your header or at the top of the page*/
$time_start = microtime(true);
/* your script goes here */
/*in your footer, or at the bottom of the page*/
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "It took $time seconds\n";
请注意,这将添加两个函数执行和一小部分数学作为开销。
答案 3 :(得分:1)
你能不注册一个叫定时器结束的关机功能? http://us3.php.net/register_shutdown_function这样你只需要在你认为可能出现问题的地方启动计时器。
答案 4 :(得分:1)
如果您使用FastCGI执行PHP脚本,您可以使用FastCGI Process Manager(FPM,php-fpm),它也支持所谓的“slowlog”。
您可以使用配置选项在php-fpm的php配置中启用它(对于debian,这是在/etc/php5/fpm/pool.d/www.conf
中):request_slowlog_timeout和slowlog。
request_slowlog_timeout
服务单个请求的超时,之后PHP回溯将被转储到'slowlog'文件。值“0”表示 “关”。可用单位:s(秒)(默认),m(inutes),h(我们的)或 天)。默认值:0。
slowlog
慢速请求的日志文件。默认值:#INSTALL_PREFIX#/ log / php-fpm.log.slow。
来自http://php.net/manual/en/install.fpm.configuration.php
另请参阅:http://php.net/manual/en/install.fpm.php和http://rtcamp.com/tutorials/php/fpm-slow-log/