如何找出 Apache 中加载时间最长的 PHP 脚本?
答案1
有几种方法可以做到这一点。
1:启用mod_status在您的 Web 服务器上。这样,您就可以通过浏览 /server-status/ 来了解 Apache 服务器的总体运行情况。请记住限制对此位置的访问:
ExtendedStatus on
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.0.0/24
</Location>
2:修改您的日志格式指令添加处理时间。然后,您可以将 URI 与响应时间关联起来:
LogFormat "%h %t \"%r\" %b sec:%T usec:%D"
这将显示远程 IP、请求日期时间、请求、发送的字节数、秒和微秒。
3:对于脚本内存大小和脚本命中率,自带的管理控制台缓存非常好。具有大型类层次结构的脚本可以扩展到内存中的许多兆。
4:分析你的 php 脚本可能会有所帮助。如果你想专注于分析单个脚本,调试肯定会有所帮助。用户 Damien 建议一种方法。我建议记录您的内存使用情况并且也使用微时间,但设置了登录阈值,如下所示:
$THRESH = 2;
$profile = array();
$profile['start'] = microtime( true );
// stuff
$profile['end'] = microtime( true );
$profile['delta'] = $profile['end'] - $profile['start'];
if( $profile['delta'] >= $THRESH )
error_log( __FILE__.": ".$profile['delta']." seconds " );
调整阈值可以使您的日志更加干净。
答案2
运行它们Apache JMeter。
Apache JMeter 可用于测试静态和动态资源(文件、Servlet、Perl 脚本、Java 对象、数据库和查询、FTP 服务器等)的性能。它可用于模拟服务器、网络或对象的高负载,以测试其强度或分析不同负载类型下的整体性能。您可以使用它对性能进行图形分析,或测试高并发负载下的服务器/脚本/对象行为。
答案3
通过报告工具运行服务器日志。一个不错的工具应该能够告诉您平均用户下载每个页面需要多长时间。它还应该显示每个页面的最小和最大下载时间以及许多其他统计数据。
答案4
根据您的脚本,您可以使用微时间函数:
$stime = microtime();
$stime = explode(" ",$stime);
$stime = $stime[1] + $stime[0];
//Some Code...
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$totaltime = ($mtime - $stime);
echo $totaltime;
尽可能多地中断以找到错误的代码部分。
(但也许这应该是 SO 答案...)