【问题标题】:High CPU mod_fcgid: can't apply process slot高 CPU mod_fcgid:无法应用进程槽
【发布时间】:2013-09-11 22:07:28
【问题描述】:

我收到以下警告:

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 再次升高。

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

【问题讨论】:

  • 我真的不知道为什么这是从 serverfault 迁移出来的。

标签: warnings cpu mod-fcgid


【解决方案1】:

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

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

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

在任何情况下,FcgidMaxProcesses (1000) 的默认值都是离谱的。你运行一个愚蠢的'ab -c100 -n10000

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

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

【讨论】:

  • 感谢您对此错误的解释。两天前我禁用了我的显示网络以查看会发生什么,并且服务器现在运行良好。我联系了一家专门优化服务器和使用 Nginx 进行负载平衡的公司。我认为一台服务器处理 650K 请求 p/d 实在是太多了。我会在这家公司建立负载平衡环境/网络或您如何称呼它后回复这里的状态。
  • 我在这种“优化公司”工作。抛出 Nginx 可能会有所帮助,但这不是一个自动解决方案。直到今天,我只知道 1 个案例(实际上是数百个)我无法配置 Apache,因为它不是瓶颈。 Apache 非常高效且可预测,但这并不是炒作。大多数说“改用 Nginx”的人根本不知道 Apache 并不复杂,而且有据可查。
  • @zerodeux 这也是我的经验。我在一个有很多 apache 的 ISP 工作,这里几乎没有 nginx。
  • 我有一个专用服务器、八核 CPU/八线程、64GB 内存和大约 10 个站点,有 10/20 个用户在线(每月大约 8000/9000 个会话)。我看到很多 503,我更喜欢放慢速度,但从不显示 503……我能做什么?我的设置: FcgidIdleTimeout 180 FcgidProcessLifeTime 300 FcgidMaxProcesses 300 FcgidMaxProcessesPerClass 90 FcgidMinProcessesPerClass 0 FcgidConnectTimeout 600 FcgidIOTimeout 600 FcgidIdleScanInterval 60 FcgidMaxRequestsPerProcess 10000 FcgidInitialEnv PHP_FCGI_MAX_REQUE
  • 想知道是否可以对超过 FcgidMaxProcessesPerClass 的请求进行排队以处理短脉冲。
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2011-08-24
相关资源
最近更新 更多