FreeBSD上的Apache不响应,但不忙

我运行一个相当繁忙的networking服务器。 这是非常标准的:在FreeBSD 7.1上使用mod_php的Apache。 它连接到一个单独的MySQL服务器。 它提供了大量的静态图像。

用户一直在抱怨响应时间很慢。 今天我的加载时间非常慢,然后从我的networking浏览器“无法连接,再试一次”。

查看顶部显示,服务器实际上是空闲的! 但它拒绝了更多的联系。 一分钟左右,它又开始响应(虽然还是很慢)。

netstat -s包含

161796 listen queue overflows 

但我不确定这是什么问题,因为我增加了somaxconn。

我必须达到一定的资源限制。 我还应该看什么来诊断问题?

也许你有一个相对较小的MaxClients,保持长时间的超时,以及相当多的请求。

浏览器通常会打开连接30秒左右,如果你让他们 – 所以不要设置keepalive太长。

长时间保持活跃对您的用户是有利的,但它确实耗尽了资源。 你能看到阿帕奇计分板(即服务器状态页?)? 你所有的插槽都是以“K”状态消耗吗?

一般来说,混合应用程序服务(您的PHP应用程序)和大容量静态文件是一个坏主意,他们有不同的要求。 一个胖胖的Apache进程(就像PHP中的进程一样)将浪费大量的内存来提供静态的图片,而这些静态的图片可以由一个精简的图片服务。 考虑将它们放在单独的物理服务器组中,或放在同一组服务器上的不同服务器实例上(configuration非常不同)

第一。 你的瓶颈几乎可以肯定是MySQL后端(或前端和后端之间的networking)。 所以你有闲置的前端。
第二。 你可能希望通过nginx / lighttpd服务静态,如果它真的是高负荷的Web服务器。
第三。 我已经发布了有关FreeBSD sysctl调优的快速手册,您可能会觉得它很有用。

PS。 还有一个apache指令ListenBacklog,你可能希望增加MaxClients。

Apache的MaxClients是一个很大的。 您可以通过启用mod_status并在Web浏览器中运行“apachectl status”或在Web浏览器中加载“ http:// localhost / server-status ”来查看当前客户端/连接计数

根据您的静态图片服务的规模,您可能会考虑运行诸如lighttpd之类的东西来提供图片。 它只是静态图像往往会好得多。 Lighttpd(lighty)就是这样,轻而易举,可以更快速地提供静态内容,稍微调整一下就不会遇到这些限制。 Apache也可以做到这一点,但是对于静态内容来说,Apache是​​有点沉重的。

它做反向DNS查找? (禁用它们)

avahi-daemon在运行吗? (杀了它)