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

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

我有一个 apache 作为后端 JBoss 服务器的代理,我使用 mod_proxy_loadbalancer。我还有一些静态文件和资源,我将它们放在“upload”目录中,该目录在 apache httpd.conf 中配置为目录。我还启用了 mod_mem_cache,因为该服务器中有足够的内存。该服务器是 HP DL360 4 核/8G RAM/带有 RAID 卡和 15K SAS 磁盘。

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

我已经在apache端打开了mod_status,我发现许多请求处于“R”状态,这意味着正在读取请求。

状态读取是什么意思?这会影响服务器响应时间的速度吗?我们如何减少 apache 配置中的“R”状态请求。

谢谢

答案1

您可以检查以下几件事:

  • “正在读取”状态仅表示 Apache 正在读取来自远程客户端的请求。在 FireBug 或类似工具中,您可以看到正在发送的“请求”标头。这些标头通常很小,处理起来不会花很长时间。许多 Apache 插槽停滞在“读取”状态表明某处存在某种问题。
  • 使用 ApacheBench ( ) 之类的基准测试程序ab来测试静态文件的速度。如果您在服务器上运行它,除非出现问题,否则您应该会获得非常高的请求率(例如:10-20k/秒)。您还可以远程运行它,以查看由于网络距离和速度而导致的速度差异。
  • 你是当然客户端或服务器网络速度不是问题吗?基准测试应该能够确认这一点,并为您提供速度上限。例如,如果您的服务器连接速度仅为 10 Mbps,则如果文件大小为 50kb,则它只能提供大约 25 个文件/秒。
  • 检查 Apache 的服务器状态和您的服务器top,并iostat检查是否有任何明显的 CPU、内存或 IO 过度使用迹象。确保 Apache 的MaxClients设置不要过高或过低(这两种情况都不好,原因不同)。
  • 考虑使用替代 Web 服务器来处理静态文件,例如 lighttpd 或 nginx。根据 Apache 的设置,您可以让 Apache 处理动态文件,其他服务器处理静态文件,从而节省大量内存/CPU。例如,在我的服务器上,lighttpd 仅使用 50 MB 的 RAM 即可以高达 20-30k/s 的速度处理静态文件,而 Apache 仅使用 500 MB 的 RAM 即可以 10-20k/s 的速度处理静态文件(内存使用率是最大的优势)。
  • 检查 Apache、系统和应用程序日志中是否有任何相关的错误消息。
  • 另一件需要检查的事情是 Apache 中的传入请求数量。如果传入请求突然激增,您可能会收到大量“读取”,因为您的服务器会尝试处理所有请求。这可能是正常的峰值,也可能是一种 DoS(意外或恶意)。如果您在服务器状态中看到来自同一 IP 的多个连接,或者通过netstat它,则可能是原因。

相关内容