达到可怕的 256 个最大连接 Apache 限制后该怎么办

kmo*_*y12 8 php http lamp apache-2.2

在我摸不着头脑试图弄清楚为什么我的站点响应如此缓慢即使服务器资源很好之后,我终于检查了 Apache 状态并发现:

78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers
Run Code Online (Sandbox Code Playgroud)

看来我的 apache 连接数已经达到极限了。任何试图访问我的网站的人都会被列入“等待名单”,直到 Apache 再次免费。

看来我有两个选择。

A) 将最大连接数限制提高到 256 以上。虽然根据这篇文章这并不容易:

默认情况下,MaxClients 参数的编译硬限制为 256。然而,这可以通过重新编译 Apache 来更改。一些发行版或托管公司将此限制提高到非常高的值,例如 512 甚至 1024,以应对大负载。

B) 找到占用太多时间的脚本。这对我来说似乎更棘手,因为大多数 apache 进程只是出现然后又消失了。此外,我的网站 PHP 脚本优化得很好……而且,服务器资源也很好:

Server load 2.69 (8 CPUs)   
Memory Used 25.33% (2,039,108 of 8,048,804) 
Swap Used   1.32% (54,156 of 4,095,992)
Run Code Online (Sandbox Code Playgroud)

我应该选择哪个选项(如果有任何一个),我应该怎么做?

编辑

更多信息:服务器版本:Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0-fips DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635

HTTP 会议:http : //pastebin.com/yBeLt6mP

Parital 请求示例:http : //pastebin.com/vzUVDMPR

如果粘贴箱显示奇怪,则切换文本换行。

Sha*_*den 10

那篇文章不准确;MaxClients使用 prefork MPM 时可以提高到 256 以上(根据您对问题的描述,我假设您目前正在使用)。从文档

对于非线程服务器(即 prefork),MaxClients转换为将启动以服务请求的最大子进程数。默认值为 256;要增加它,您还必须提高ServerLimit.

ServerLimit是具有硬编译限制的那个,但是它已经超出了您应该到达的地方,而您的服务器不会遇到其他瓶颈。 文件

ServerLimit 20000编译到服务器有硬性限制(对于 prefork MPM 200000)。这是为了避免由拼写错误引起的不良影响。

因此,如果您想将客户端限制提高到 512 之类的值,那么:

MaxClients 512
ServerLimit 512
Run Code Online (Sandbox Code Playgroud)

您还应该看看您使用的是哪种 MPM,因为除 prefork 之外的 MPM 更适合扩展。请参阅此处了解更多信息。