重新启动 httpd 时出现“设备上没有剩余空间:AH00023:无法创建 mpm-accept 互斥锁”

重新启动 httpd 时出现“设备上没有剩余空间:AH00023:无法创建 mpm-accept 互斥锁”

我的服务器有时会被 Apache 中的连接填满,卡在“发送回复”状态,需要我重新启动 Apache。大多数情况下,这有效,但有时当我尝试重新启动 Apache 时,我会收到此错误:

Job for httpd.service failed because the control process exited with
error code. See "systemctl status httpd.service" and "journalctl -xe"
for details.

根据建议运行systemctl status httpd.servicejournalctl -xe然后返回以下相关信息:

Nov 15 06:24:06 hostname.biologyreporter.com systemd-logind[874]:
 Failed to remove runtime directory /run/user/1067: Device or resource busy

Nov 15 06:24:27 hostname.biologyreporter.com restartsrv_httpd[29484]:
 [Fri Nov 15 06:24:27.255594 2019] [core:emerg] [pid 29509:tid 47498001208384]
 (28) No space left on device: AH00023: Couldn't create the mpm-accept mutex  
 
Nov 15 06:24:27 hostname.biologyreporter.com restartsrv_httpd[29484]:
 (28) No space left on device: could not create accept mutex  
 
Nov 15 06:24:27 hostname.biologyreporter.com restartsrv_httpd[29484]:
 AH00015: Unable to open logs

Nov 15 06:24:27 hostname.biologyreporter.com systemd[1]:
 httpd.service: control process exited, code=exited status=1  
 
Nov 15 06:24:27 hostname.biologyreporter.com systemd[1]:
 Failed to start Apache web server managed by cPanel EasyApache.
 -- Subject: Unit httpd.service has failed

然后,apache 可能需要大约 10 分钟左右才能真正重新启动,网站才能再次正常运行。我不知道为什么它会说“设备上没有剩余空间”,例如df,运行时返回以下内容(没有任何地方占用了 100% 的空间):

Filesystem     1K-blocks      Used Available Use% Mounted on
devtmpfs         3973024         0   3973024   0% /dev
tmpfs            3983400         0   3983400   0% /dev/shm
tmpfs            3983400    255296   3728104   7% /run
tmpfs            3983400         0   3983400   0% /sys/fs/cgroup
/dev/sda2      952008348 137586024 766039760  16% /
/dev/sda1         999320    134892    795616  15% /boot
/dev/loop0       3997376      8856   3778808   1% /tmp
tmpfs             796684         0    796684   0% /run/user/0
tmpfs             796684         0    796684   0% /run/user/1022

我无法找到有关上述具体错误的原因和解决方案的任何可靠信息

  • No space left on device: AH00023: Couldn't create the mpm-accept mutex
  • Failed to remove runtime directory /run/user/1067: Device or resource busy

我应该怎么做才能解决这个问题,以便这些错误不会出现并且 apache 总是顺利重新启动?

答案1

这很可能是由于操作系统的信号量限制以及 Apache 没有正确地进行自身清理造成的。

查看有关信号量限制的更多详细信息https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/tuning_and_optimizing_red_hat_enterprise_linux_for_oracle_9i_and_10g_databases/sect-oracle_9i_and_10g_tuning_guide-setting_semaphores-setting_semaphore_parameters

这些错误意味着系统中缺少进程内通信资源,例如信号量或共享内存段。尝试运行以下命令查看是否已达到信号量限制并查看结果:

ipcs -s | wc -l

cat /proc/sys/kernel/msgmni

cat /proc/sys/kernel/sem

通过 SSH 或控制台执行以下命令,看看是否有帮助:

ipcs -s | awk -v user=apache '$3==user {system("ipcrm -s "$2)}'

ipcs -s列出当前使用的信号量。

awk -v user=apache过滤掉 apache 用户拥有的那些,然后下一部分icprm -s "id"对每个用户执行,以删除该信号量。

即整个命令将删除 apache 用户拥有的所有信号量。

答案2

虽然@dzup4uk 的回答似乎能够指出问题所在,但为了真正解决问题,你必须确保信号量得到清理。 ipcs命令将显示问题所在,但为了真正解决问题,你必须进行一些清理,这可以通过

ipcrm -a

答案3

如果您的 Apache 在 nobody 用户下运行,那么您需要以 nobody 身份运行它,如下所示:

ipcs -s | awk -v user=nobody '$3==user {system("ipcrm -s "$2)}'

相关内容