基本的 Apache httpd 服务器设置变得很慢,无法提供需要频繁重启的图像

基本的 Apache httpd 服务器设置变得很慢,无法提供需要频繁重启的图像

我有一个在 RHEL 5.3 上运行的 Apache httpd 服务器。我使用此服务器为在另一个 httpd 实例上运行的网站提供静态内容(图像)。在公共 Web 目录中有几张图片,仅此而已。启动一段时间后,服务器向浏览器提供图像的速度变得非常慢,并且在尝试提供 16x16 png 时经常会挂起几分钟。

调试该问题的最佳方法是什么?

我已经跑了顶部在机器上检查是否有足够的可用内存和 CPU。机器不会进入交换状态,当通过浏览器请求图像时,httpd 进程仅占用 CPU 和内存几秒钟。然而,图像通常在几分钟后才会返回。

重新启动 httpd 进程可解决该问题,并且图像可快速加载。

这似乎是最简单的 Web 服务器设置。问题可能出在哪里?

谢谢

更新:httpd.conf 设置:

Timeout 10
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 15
ServerLimit 3

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

答案1

几个问题:

您是否对 Apache.conf 文件进行过任何调整?您使用的是哪个 Apache MPM?
Apache.conf 文件中当前设置了哪些参数:

Timeout
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout
MinSpareServers
MaxSpareServers
StartServers
MaxClients
MaxRequestsPerChild

答案2

诊断建议:

  1. 您已经检查了 CPU 和内存,但最好也观察一下磁盘带宽和其他统计数据(我建议使用 dstat -af)。您要查找的内容包括大量磁盘读取或写入、大量上下文切换或中断,以及服务器启动和出现问题时的行为之间变化很大的其他测量值。

  2. 要检查的另一件事是弄清楚行为是否是时间流逝的函数,还是请求数量的函数,或者两者兼而有之?

    • 启动服务器,几个小时不请求任何图片,然后请求一张图片,请求快吗,还是?
    • 启动服务器,尽可能快地请求图像(使用环回以避免网络延迟)并查看达到某个预定的缓慢程度(例如 10 秒响应)需要多长时间
  3. 测试是否是网络问题。当服务器出现问题(例如 10 秒响应)时,通过环回接口请求图像。如果返回速度很快,请查看网络。如果速度很慢,您可能可以忽略主机外部的网络问题。

答案3

使用mod_status检查和监控服务器状态。我猜大多数连接都在 KeepAlive 状态中等待。您可以尝试将其关闭或降低到较低的值,例如 KeepAliveTimeout 4。

相关内容