14

我收到以下警告:

mod_fcgid:无法为 /var/www/cgi-bin/cgi_wrapper/cgi_wrapper 应用进程槽

一旦出现此警告,服务器 CPU 就会提高到 97% - 101%

服务器每天获得大约 140K 的页面浏览量。此警告主要出现在 11:00-12:00 左右。除了 Analytics 计算的 140K 网页浏览量外,它还会向在其网站上显示文字广告的第三方网站发出请求。大约 2700 个网站正在展示一个广告,并且每小时总共向服务器发出 22139 个请求。

我试过了:chmod 755 /var/log/httpd但 /var/log 中没有文件夹“httpd”

我尝试将 MaxSpareServers 和 MaxClients 调整为任何可能的高值。但完全没有影响。在 Apache 重新启动后,它似乎会好一阵子(服务器的响应仍然有点慢,并且日志文件中不再出现警告)。但过了一会儿,同样的警告出现了,CPU 再次升高。

如果有人有建议请告诉我,谢谢大家。

4

1 回答 1

33

此警告告诉您 FastCGI 进程池已用尽,它具有 FcgidMaxProcesses 的全局限制和 FcgidMaxProcessesPerClass 的每个脚本限制(请参阅http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidmaxprocesses) .

可以使用以下信息调整此池的大小:

  • 如果您的应用程序受 CPU 限制并且您不希望它变慢,则将 FcgidMaxProcesses 设置为服务器上的 CPU 内核数;服务器平均负载将在高峰时段趋于这个数字。您的服务器将为客户端提供服务而不会减慢速度,也会拒绝一些跟上的请求。拒绝在服务器端记录“无法应用进程槽”,并在客户端被视为 503 错误
  • 在您的应用程序并非完全受 CPU 限制的(常见)情况下,例如它等待其数据库服务器的大量回复(或其他 I/O 或远程资源),您的 FcgidMaxProcesses 可能比您的数量略高CPU 内核。根据经验,我从两倍的 CPU 内核数开始,然后检查一整天的峰值平均负载(一周更好)。然后调整,直到它达到平均峰值。负载 = CPU 内核数。

无论如何,FcgidMaxProcesses (1000) 的默认值是离谱的。你运行一个愚蠢的'ab -c100 -n10000

为了确定,让我换一种说法:“无法应用进程槽”错误是一个正常错误,因为您的服务器有固定数量的资源,并且可能会达到这些限制。如果你把这个限制推到高位。对于您的服务器资源,警告可能永远不会再次出现,但您的服务器将在负载下崩溃。

顺便说一句,MaxSpareServers 和 MaxClients 与您的问题无关,它们调节 Apache 进程池,而不是 FastCGI 进程池。这是另一个话题。

于 2013-10-06T23:27:25.370 回答