Apache 2.4.37 重新加载导致错误“记分牌已满,未达到 MaxRequestWorkers.Increase ServerLimit。”

Apache 2.4.37 重新加载导致错误“记分牌已满,未达到 MaxRequestWorkers.Increase ServerLimit。”

我正在运行带有 Apache 2.4.37 的 CentOS 8。

每天一次,logrotate 通过正常重启(重新加载)来轮换 Apache 日志:

[mpm_event:notice] [pid 1413:tid 140292271810880] AH00493: SIGUSR1 received.  Doing graceful restart
[lbmethod_heartbeat:notice] [pid 1413:tid 140292271810880] AH02282: No slotmem from mod_heartmonitor
[mpm_event:notice] [pid 1413:tid 140292271810880] AH00489: Apache/2.4.37 (centos) OpenSSL/1.1.1g configured -- resuming normal operations
[core:notice] [pid 1413:tid 140292271810880] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

重新加载后,我立即看到 Apache 错误日志中出现了以下错误:

[mpm_event:error] [pid 1413:tid 140292271810880] AH03490: scoreboard is full, not at MaxRequestWorkers.Increase ServerLimit.

然后服务器变得无响应,并继续记录上述错误,直到我手动重新启动 Apache 进程才会开始再次工作。

我假设有些进程需要时间才能完成,并且服务器在重新加载操作期间耗尽了工作进程。出于某种原因,这导致它挂起并且无法自行恢复。但是,Apache 日志确实会轮换,所以我相信至少部分重新加载操作是成功的。

我还没有尝试对 MPM 事件配置设置进行任何调整 - 主要是因为我不确定 ServerLimit 的什么设置是“正确的”,任何猜测都是盲目的。

鉴于这个问题似乎只在正常重新加载期间发生,有人能建议如何解决这个问题吗?

还有其他方法可以避免服务器挂起吗,或者是否只需要按照错误提示增加 ServerLimit?

我对这个问题的研究得出了很多关于与 MPM 事件模式相关的旧 Apache 错误的结果,但我的 Apache 版本不应该受到这个特定错误的影响。

非常感谢您的指导。

答案1

在没有收到任何回复后,我在 Apache 用户邮件列表中提出了这个问题。他们建议增加 Event MPM 的一些限制。我现在使用以下设置,这个问题没有再发生:

<IfModule mpm_event_module>
   LoadModule cgid_module modules/mod_cgid.so
   ServerLimit 48
   ThreadsPerChild 25
   MaxRequestWorkers 800
</IfModule>

他们特别提到,应该ServerLimit将设置得比我之前设置的(32)更高,以便 Apache 有一些余量。从文档中我不清楚是否需要这样做。但它似乎起了作用。

相关内容