所以查看日志的平均响应时间大约是20-30ms,但是机器上的负载是20+,而使用外部testing的东西似乎要花费一秒钟才能加载。 我无法想象这是所有的networking延迟,所以我很好奇apache日志开始跟踪请求。 如果负载是20,那么这意味着事情在排队,甚至到达acpache进程,但是一旦他们到达那里,只需要30ms来处理?
我假设你的意思是由%D在对数线(即服务于请求的时间,以微秒为单位)提供的响应时间。 这里指出的时间是从成功读取URI(例如GET / HTTP / 1.1)开始,但是在其余的标题之前到logging所述请求的持续时间,一旦完成服务(在源代码中条款这将是从httpd://apache.wirebrain.de/lxr/source/server/protocol.c#617?v = 2.2.14到apache.wirebrain.de/lxr/source/modules/loggers/mod_log_config.c #623?v = 2.2.14)。 所以是的,一旦Apache实际上读取了这个请求,它只需要30ms。
所增加的延迟是否由于机器的负载而定,取决于负载生成的位置以及Apache httpd的configuration方式。 一种解释是你所有的httpd工作者都很忙,并且请求被阻塞在接受队列中(请参阅www.cs.rice.edu/CS/Systems/Web-measurement/paper/node3.html了解更多的技术背景那是什么;简短的版本是,如果没有可用的工作人员,httpd不会立即接受连接)。
要知道是否发生这种情况是看看httpd的状态页面(本地主机/服务器状态,你将需要mod_status(httpd.apache.org/docs/2.2/mod/mod_status.html)configuration为),看看你有没有空闲的工人(以及他们是否“足够”)。 如果不是,请尝试增加工作人员的数量httpd spawns(具体configuration取决于您使用的是哪个MPM模块;对于mpm_worker(httpd.apache.org/docs/2.2/mod/worker.html),您将增加MaxClients ,ThreadsPerChild,ServerLimit等,注意不要超过你机器的可用内存或最大打开的文件(记住每个连接至less有一个文件句柄)。
取决于/为什么/所有的阿帕奇工人都被捆绑起来,这可能会帮助你。 如果他们都在长时间运行的dynamic页面生成(即mod_php之类的),所有这一切将会增加你的系统上的负载。 如果系统上的负载来自次级存储子系统,并且所有Apache进程都在大文件传输中捆绑并等待I / O子系统,那么您将获得更多的负载。 有两个解决方法; 如果它是dynamic内容,那么您将需要限制对长时间运行的脚本的并发访问(例如,将PHP从工作进程中移出并进入FastCGI甚至CGI进程,并将这些进程的数量限制在MaxClients之下的某处设置,使非dynamic的对象可以同时服务,而不会招致接受积压。
对不起,缺less的http链接,显然我在这个网站的声誉是不够的,实际上张贴链接。
我不确定这个Apache安装是否在Windows服务器上运行,但如果是这样的话,您可以使用perfmon组合(使用networking接口/输出队列长度来报告networking队列,如果有的话)和Firefox + Firebug来logging响应时间。 这可以让你一些洞察问题可能在哪里。
我也在mod_log_config上find了这篇文章 ,不确定是否使用这个或者其他模块进行日志logging。 我没有开发Apache安装来testing它自己,但它可能值得一读。
祝你好运。