Apache的加载时间以微秒为单位 – 标题和日志之间的区别

我最近遵循这个指南来获得web服务器上的siteload的性能测量。

要loggingApache处理请求所需的时间,请将其添加到您的apacheconfiguration文件中:

LogFormat "%h %D %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

%D意味着您将看到Apache在访问日志中处理请求的时间。 时间以微秒来衡量。

为了更容易地debugging页面加载时间,将其添加到您的configuration文件中:

 Header set X-Request-Received: %t Header set X-Request-Processing-Time: %D 

记得通过执行a2enmod标题首先启用mod_headers。 现在你应该在响应中看到这些标题:

 X-Request-Received t=1286995673038485 X-Request-Processing-Time D=251 

我完全使用上面的代码(在.htaccess中定义了头文件),但是在日志中获得了“525151”,而在相同请求的头文件中获得了“262”。 一般来说,这些数字之间似乎有数量级的差别

 192.0.2.1 525151 - - [21/Aug/2011:14:19:53 +0200] "GET /images/site/slide-1.png HTTP/1.1" 262 423285 "http://example.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1" 

 X-Request-Processing-Time:D=262 X-Request-Received:t=1313929193502879 

我怎样才能解决这个问题?

你可以validation你的LogFormat名称“组合”匹配什么你的CustomLogvariables正在使用。 我在OS X上进行了testing,除了在写回头文件和读取日志时(在将所有数据发回给客户端之后)读取variables之间的细微差别之外,它们非常接近:

 /etc/apache2# grep LogF httpd.conf LogFormat "%h %l %u %t \"%r\" %>s %b %t %D" common /etc/apache2# grep CustomL httpd.conf # a CustomLog directive (see below). CustomLog "/private/var/log/apache2/access_log" common # wget -qqO /dev/null -S http://localhost/ ... X-Request-Received: t=1314588821970347 X-Request-Processing-Time: D=336 /private/var/log/apache2# tail access_log ::1 - - [28/Aug/2011:20:33:41 -0700] "GET / HTTP/1.0" 200 44 [28/Aug/2011:20:33:41 -0700] 587 

我认为你最好的select可能是为你的自定义LogFormatselect一个“正确的”名字,而不是重新使用/改变combined日志格式。

除此之外(和@polynomialbuild议的一样),似乎你所显示的configuration和显示的输出之间存在差距。

如果只是为了使疑难解答更不明确(目前,你不知道是否默认combinedLogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined )或者正在使用您的版本)。

所以我会先做一些事情:

LogFormat "%h %D %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" perf-combined

然后在需要的地方使用perf-combined。

看@ @ polynomial例子中的Header%D和AccessLog%D值之间的相当大的差异,我还想知道这两者实际上是否代表请求处理中的两个不同的点:

  • 由于%D的标题值在此页面上的所有示例中都较低,因此可能会显示形成响应标题的时间,但不一定是正文
  • %D的AccessLog值可能是发送完整响应的时间。

这是一个完整的猜测。