因此,查看日志的平均响应时间约为 20-30 毫秒,但机器上的负载为 20+,并且使用外部测试似乎需要花费一秒钟的时间来加载。我无法想象这都是网络延迟,所以我很好奇 apache 日志从什么时候开始跟踪请求。如果负载为 20,这是否意味着事情正在排队等待甚至到达 acpache 进程,但一旦到达那里,处理只需要 30 毫秒?
小智 9
我假设您的意思是日志行中 %D 提供的响应时间(即为请求提供服务的时间(以微秒为单位))。所述的时间是从成功读取 URI(例如 GET / HTTP/1.1)但在其余标头到记录所述请求之前的持续时间,一旦它被完全服务(在源代码中)这将是从 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 真正读取所述请求,它只需要 30 毫秒。
增加的延迟是否是由机器负载引起的取决于负载的产生位置以及 Apache httpd 的配置方式。一种解释是您所有的 httpd 工作人员都忙,并且请求卡在接受队列中(有关更多技术背景,请参阅 www.cs.rice.edu/CS/Systems/Web-measurement/paper/node3.html那是什么;简短的版本是如果没有可用的工作人员,httpd 不会立即接受连接)。
要了解是否发生这种情况,请查看 httpd 的状态页面(localhost/server-status,您需要为那)并查看您是否还有闲置的工人(以及他们是否“足够”)。如果没有,请尝试增加 httpd 生成的工作线程数量(具体配置取决于您使用的 MPM 模块;对于 mpm_worker (httpd.apache.org/docs/2.2/mod/worker.html),您将增加 MaxClients , ThreadsPerChild, ServerLimit, etc. 视情况而定。注意不要超过机器的可用内存或打开文件的最大值(请记住,每个连接至少有一个文件句柄)。
根据 /why/ 所有 apache 工作人员都被捆绑起来,这可能对您有所帮助。如果它们都被长时间运行的动态页面生成(即 mod_php 或类似的)所束缚,那么这一切只会增加系统的负载。如果您的系统上的负载来自低于标准的存储子系统,并且所有 Apache 进程都被大文件传输捆绑并等待 I/O 子系统,那么您只会获得更多负载。两者都有解决方法;如果它是动态内容,您将希望限制对长时间运行的脚本的并发访问(例如,通过将 PHP 移出工作进程并进入 FastCGI 或什至 CGI 进程并将其数量限制在低于 MaxClients 的某个位置设置以便可以同时提供非动态对象,而不会导致接受积压。
很抱歉缺少 http 链接,显然我在本网站上的声誉不足以实际发布链接。
归档时间: |
|
查看次数: |
18088 次 |
最近记录: |