我有一个在RHEL 5.3上运行的Apache httpd服务器。 我正在使用此服务器为另一个httpd实例上运行的网站提供静态内容(图像)。 在公共networking目录中有几个图像,就是这样。 启动后的一段时间,服务器向浏览器提供图片的速度非常缓慢,并且在试图服务于16×16 png时经常挂起几分钟。
debugging这个问题最好的方法是什么?
我已经在机器上运行了顶部 ,以validation是否有足够的可用内存,并提供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>
几个问题:
你有没有对Apache.conf文件进行任何调整? 你正在使用哪个Apache MPM?
目前在Apache.conf文件中为以下参数设置了哪些参数:
Timeout KeepAlive MaxKeepAliveRequests KeepAliveTimeout MinSpareServers MaxSpareServers StartServers MaxClients MaxRequestsPerChild
诊断build议:
你已经检查过CPU和内存,但是同时观察磁盘带宽和其他统计信息也是个好主意(我build议dstat -af)。 您正在寻找诸如大量磁盘读取或写入,大量上下文切换或中断等其他度量,这些度量在服务器启动和服务器出现故障时的行为之间差别很大。
另一件要检查的事情是弄清楚这个行为是否是时间传递的函数,或者是请求的数量,还是两者兼而有之?
testing是否是networking问题。 当服务器遇到问题(例如10秒响应)时,请通过回送接口请求图像。 如果它回来快,看networking。 如果速度慢,您可能会忽略主机之外的networking问题。
使用mod_status来检查和监视服务器状态。 我猜大部分连接都在等待状态KeepAlive。 您可以尝试将其closures或closures,如KeepAliveTimeout 4。