如何提高服务器静态文件的Apache速度 – mod_status中的许多“R”

我有一个Apache服务器作为后端JBoss服务器的代理,我使用mod_proxy_loadbalancer。 我也有一些静态文件和资源,我把它放在一个“上传”目录中,这个目录在apache httpd.conf中被configuration为一个目录,我也启用了mod_mem_cache,因为我的服务器内存已经足够了,服务器是HP DL360 4核/ 8G RAM / RAID卡和15K SAS磁盘。

我的问题是很多客户报告他们打开静态文件的速度非常慢。 当我跟踪使用FireBug,我可以看到有时打开一个静态文件(HTML / SWF <50kb)需要大约5-7s。 服务器端带宽和我办公室的带宽都足够了。 而当我监视服务器端,Apache的平均负载约20个请求/秒。

我已经打开了Apache的mod_status,我可以发现许多请求都处于“R”状态,这意味着读取请求。

阅读状态是什么意思? 这是否影响服务器响应时间的速度? 我们如何才能减lessApacheconfiguration中的“R”状态请求。

谢谢

几件事你可以检查:

  • “阅读”状态仅仅意味着Apache正在从远程客户端读取请求。 在FireBug中,或类似的工具,你可以看到发送的“请求”头。 这些通常很小,不需要很长时间来处理。 许多Apache插槽在“读取”状态中停顿,表示某处存在某种问题。
  • 使用像ApacheBench( ab )这样的基准testing程序来testing静态文件的速度。 如果你在服务器上运行它,你应该得到一个非常高的请求率(例如:10-20k / sec),除非有什么错误。 您还可以远程运行,以查看networking距离和速度造成的速度差异。
  • 确定客户端或服务器的networking速度不是问题吗? 基准testing应该能够证实这一点,并给你一个更高的速度。 例如,如果您的服务器仅在10 Mbps的连接上,那么如果它们的大小为50kb,则只能提供大约25个文件/秒。
  • 检查Apache的服务器状态以及服务器的topiostat以检查是否有明显的CPU,内存或IO过度使用的迹象。 确保Apache的MaxClients没有设置太高或太低(两者都因为不同的原因而不好)。
  • 考虑使用替代的Web服务器来处理像lighttpd或nginx这样的静态文件。 根据你的Apache设置,你可以通过让Apache服务于dynamic文件和其他静态文件来节省大量的内存/ CPU。 例如,在我的服务器上,lighttpd可以提供高达20-30k / s的静态文件,而只有50 MB的内存使用量,而Apache只能在500 MB(内存使用率是最大的优势)下达到10-20k / s。
  • 检查Apache,系统和应用程序日志是否有任何相关的错误消息。
  • 另外要检查的是Apache中的传入请求的数量。 如果您的传入请求突然激增,您可能会收到大量的“读取”,因为您的服务器试图处理所有请求。 这可能是一个正常的高峰或可能是一种forms的DoS(意外或恶意)。 如果您在服务器状态中看到多个来自同一IP的多个连接,或者通过netstat则可能是一个可能的原因。