Apache 关闭 - 无法获取互斥量
Apache shutdown - Couldn't grab mutex
由于某些我不知道的原因,Apache 正在崩溃。
这是崩溃时的 apache 日志:
[Sat Jun 02 02:38:05.196006 2018] [mpm_prefork:emerg] [pid 1122] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.196006 2018] [mpm_prefork:emerg] [pid 1116] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.198767 2018] [mpm_prefork:emerg] [pid 1115] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.199523 2018] [mpm_prefork:emerg] [pid 3924] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.204189 2018] [mpm_prefork:emerg] [pid 1937] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.207362 2018] [mpm_prefork:emerg] [pid 1120] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:06.057310 2018] [core:alert] [pid 1099] AH00050: Child 1115 returned a Fatal error... Apache is exiting!
[Sat Jun 02 02:38:06.057483 2018] [:emerg] [pid 1099] AH02818: MPM run failed, exiting
我最近在服务器上做的最后一件事是为我的网站安装 certbot 到通用 HTTPS 证书。
我在 Ubuntu 17.10 和 Apache 2.4.27 上遇到了同样的错误。
这似乎与 Apache 与 OS 谈论文件锁定有关。当我进入 /etc/apache2/apache2.conf
并将 Mutex flock
添加到 Mutex 部分(靠近 ServerRoot 部分)时,似乎已经解决了问题。
不幸的是,我只能说这使用 flock() 函数(系统调用?)来处理文件锁定。每 https://httpd.apache.org/docs/2.4/mod/core.html#mutex
所以这是一个有点黑魔法的修复,因为我个人对 Apache 的文件锁定行为不够熟悉,无法说明它为什么有效,我只能说它有效,因为 Apache 崩溃似乎已经停止,但是到目前为止。不过,它可能对您有所帮助,而且风险似乎相当低。
您尚未共享完整的日志跟踪。可能是:
[Sun Jul 21 15:49:43 2019] [error] (12)Cannot allocate memory: fork:
Unable to fork new process
这是由于内存不足,apache 无法创建新进程。它还取决于您将其配置为分叉的进程数。当网站上的流量过多时,就会发生这种情况。
虽然 Sean 的解决方案有效,但我学到了另一种解决此问题的方法。
首先,您应该知道这个问题与在 Ubuntu 上使用 Certbot 和 SSL 证书有关。
现在,要解决问题而不做任何您不确定的事情,只需这样做(以 root 身份或使用 sudo):
- 创建以下文件:
/etc/apache2/conf-available/mutex.conf
- 在新创建的文件中添加
Mutex file:${APACHE_LOCK_DIR} default
- 使用
a2enconf mutex
启用新的配置文件
- 使用
systemctl restart apache2
或 systemctl reload apache2
重新启动 Apache
但是,嘿,它已经默认启用了!为什么要为此制作一个文件?
当我找到这个解决方案时,我也一样。
不知何故,似乎一旦您开始使用 SSL 证书,此配置行就会以某种方式被“忽略”。
因此,Apache 无法找到互斥文件的锁定目录。
只是将此行添加(删除注释)到 /etc/apache2/apache2.conf
中也不起作用。
您必须专门创建一个配置文件并启用它。
否则解决不了问题。
以下步骤对我来说很有效。
通过 SSH 连接到服务器
编辑/etc/apache2/apache2.conf 文件。下面的命令我使用了 nano 编辑器,你可以使用你最喜欢的编辑器
sudo nano /etc/apache2/apache2.conf
搜索 "Mutex" 部分
添加下面一行,
Mutex posixsem
保存并关闭文件。
通过运行命令重启Apache服务前检查配置,
sudo apachectl configtest
- 如果上述检查一切正常,请重新启动 Apache 服务,
sudo service apache2 restart
希望这对某人有所帮助。
我正在使用 Ubuntu 20 和 apache 2.4。
注释 Mutex 指令没有解决问题,但使用 posixsem 解决了问题。
因此,我已将 Mutex posixsem
添加到我的 apache2.conf 并且服务器不再崩溃。
来源:https://serverok.in/apache-ah00144-couldnt-grab-the-accept-mutex
由于某些我不知道的原因,Apache 正在崩溃。
这是崩溃时的 apache 日志:
[Sat Jun 02 02:38:05.196006 2018] [mpm_prefork:emerg] [pid 1122] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.196006 2018] [mpm_prefork:emerg] [pid 1116] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.198767 2018] [mpm_prefork:emerg] [pid 1115] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.199523 2018] [mpm_prefork:emerg] [pid 3924] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.204189 2018] [mpm_prefork:emerg] [pid 1937] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:05.207362 2018] [mpm_prefork:emerg] [pid 1120] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Sat Jun 02 02:38:06.057310 2018] [core:alert] [pid 1099] AH00050: Child 1115 returned a Fatal error... Apache is exiting!
[Sat Jun 02 02:38:06.057483 2018] [:emerg] [pid 1099] AH02818: MPM run failed, exiting
我最近在服务器上做的最后一件事是为我的网站安装 certbot 到通用 HTTPS 证书。
我在 Ubuntu 17.10 和 Apache 2.4.27 上遇到了同样的错误。
这似乎与 Apache 与 OS 谈论文件锁定有关。当我进入 /etc/apache2/apache2.conf
并将 Mutex flock
添加到 Mutex 部分(靠近 ServerRoot 部分)时,似乎已经解决了问题。
不幸的是,我只能说这使用 flock() 函数(系统调用?)来处理文件锁定。每 https://httpd.apache.org/docs/2.4/mod/core.html#mutex
所以这是一个有点黑魔法的修复,因为我个人对 Apache 的文件锁定行为不够熟悉,无法说明它为什么有效,我只能说它有效,因为 Apache 崩溃似乎已经停止,但是到目前为止。不过,它可能对您有所帮助,而且风险似乎相当低。
您尚未共享完整的日志跟踪。可能是:
[Sun Jul 21 15:49:43 2019] [error] (12)Cannot allocate memory: fork: Unable to fork new process
这是由于内存不足,apache 无法创建新进程。它还取决于您将其配置为分叉的进程数。当网站上的流量过多时,就会发生这种情况。
虽然 Sean 的解决方案有效,但我学到了另一种解决此问题的方法。
首先,您应该知道这个问题与在 Ubuntu 上使用 Certbot 和 SSL 证书有关。
现在,要解决问题而不做任何您不确定的事情,只需这样做(以 root 身份或使用 sudo):
- 创建以下文件:
/etc/apache2/conf-available/mutex.conf
- 在新创建的文件中添加
Mutex file:${APACHE_LOCK_DIR} default
- 使用
a2enconf mutex
启用新的配置文件
- 使用
systemctl restart apache2
或systemctl reload apache2
重新启动 Apache
但是,嘿,它已经默认启用了!为什么要为此制作一个文件?
当我找到这个解决方案时,我也一样。
不知何故,似乎一旦您开始使用 SSL 证书,此配置行就会以某种方式被“忽略”。
因此,Apache 无法找到互斥文件的锁定目录。
只是将此行添加(删除注释)到 /etc/apache2/apache2.conf
中也不起作用。
您必须专门创建一个配置文件并启用它。
否则解决不了问题。
以下步骤对我来说很有效。
通过 SSH 连接到服务器
编辑/etc/apache2/apache2.conf 文件。下面的命令我使用了 nano 编辑器,你可以使用你最喜欢的编辑器
sudo nano /etc/apache2/apache2.conf
搜索 "Mutex" 部分
添加下面一行,
Mutex posixsem
保存并关闭文件。
通过运行命令重启Apache服务前检查配置,
sudo apachectl configtest
- 如果上述检查一切正常,请重新启动 Apache 服务,
sudo service apache2 restart
希望这对某人有所帮助。
我正在使用 Ubuntu 20 和 apache 2.4。
注释 Mutex 指令没有解决问题,但使用 posixsem 解决了问题。
因此,我已将 Mutex posixsem
添加到我的 apache2.conf 并且服务器不再崩溃。
来源:https://serverok.in/apache-ah00144-couldnt-grab-the-accept-mutex