是什么原因导致 Apache 2.2 每秒连接数限制为 300 个?

是什么原因导致 Apache 2.2 每秒连接数限制为 300 个?

我们有一个运行在 CentOS 5.6 上的 Apache Web 服务器(通过 yum 安装)。今天我们迎来了预期中的大量新用户——然而出乎意料的是,我们似乎达到了每秒 300 次访问的限制——我有一个图表(Stack overflow 不允许我上传),但它显示今天有三次(当我们的网站几乎陷入停顿时)“访问次数/秒”达到 300 并保持了一段时间。在我输入时,当前数字是 292.23,今天的最大值是 300.41。

我们在 Apache 进程中运行 PHP,并连接到 MySQL 服务器(不同的物理机箱)。不过,我们很高兴 MySQL 响应良好。

我们已经将 httpd.conf 中的限制从默认的 256 提高,但这对神奇的 300 数字没有影响。我们在php.inihttpd.conf文件中都搜索了 300,但找不到。以下是我们现在使用的 prefork 配置:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      400
MaxClients       400
MaxRequestsPerChild  4000
</IfModule>

如果有人知道是什么导致了这个 300 的限制,我将不胜感激。

答案1

存在各种与系统性能相关的可能性,但事实上,这个限制是一个如此精确的整数,这颇令人怀疑——如果瓶颈是 CPU 或磁盘 I/O(甚至是网络),你不会指望有如此精确的限制。更令人怀疑的是,它是每秒的——如果它是 Apache 或 MySQL 的限制,你会期望并发连接或请求的限制,但限制为 300每秒听起来像是别的东西。

从网络角度看,您的上游是什么?如果上游有任何防火墙、负载均衡器、DDoS 缓解系统或其他 L3+ 设备,我会检查它们,看看其中是否有可能导致此问题的东西。

您知道超过每秒 300 次限制的人会看到什么吗?(​​您可能需要亲自敲一下网站才能看到会发生什么)是否有任何日志消息可以提供线索?

答案2

更改配置后,您是否执行了正常重启或关闭/启动?如果您执行正常重启,对 ServerLimit 的更改将不会生效。需要完全关闭并启动。

相关内容