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

use*_*654 6 httpd apache-2.2 apache-2.4 cpanel apache2

我的服务器有时会被 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.
Run Code Online (Sandbox Code Playgroud)

运行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
Run Code Online (Sandbox Code Playgroud)

然后可能需要大约 10 分钟左右的时间让 apache 真正重新启动并且网站再次运行。我不知道为什么它在运行时说“设备上没有剩余空间” 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
Run Code Online (Sandbox Code Playgroud)

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

  • 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 总是可以毫无问题地重新启动?

dzu*_*4uk 11

这很可能是由操作系统的信号量限制引起的,并且 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_settingsemaphore-settings

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

ipcs -s | wc -l

cat /proc/sys/kernel/msgmni

cat /proc/sys/kernel/sem
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

  • @user548654,`ipcs -s` 列出当前使用的信号量。`awk -v user=apache` 过滤掉由 apache 用户拥有的那些,下一部分为它的每一个执行 `icprm -s "id"` 删除那个信号量。即整个命令删除 apache 用户拥有的所有信号量。 (2认同)

小智 6

虽然 @dzup4uk 的答案似乎能够指出问题是什么,但为了真正解决问题,您必须确保信号量得到清理。 ipcs命令将显示问题是什么,但为了真正解决问题,您必须进行一些清理,可以使用

ipcrm -a
Run Code Online (Sandbox Code Playgroud)