我正在使用Apache2.4.37运行CentOS 8。
日志旋转每天一次,通过执行优雅的重新启动(重新加载)来旋转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版本不应该受到这个特定bug的影响。
非常感谢您的指导。
发布于 2021-08-06 19:54:24
在这里没有收到任何回复后,我在Apache用户邮件列表中提到了这个问题。他们建议对活动MPM增加一些限制。我现在正在使用以下设置,但问题尚未再次发生:
<IfModule mpm_event_module>
LoadModule cgid_module modules/mod_cgid.so
ServerLimit 48
ThreadsPerChild 25
MaxRequestWorkers 800
</IfModule>
他们特别提到,ServerLimit
应该比我以前设置的(32)更高,这样Apache就有了一些空间。从文档中我不清楚这是必要的。但它似乎起了作用。
https://serverfault.com/questions/1058677
复制相似问题