Apache关机 - 无法获取互斥锁

时间:2018-06-02 01:44:08

标签: ubuntu apache2 apache2.4 ubuntu-18.04

由于某些原因我不知道,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证书上。

4 个答案:

答案 0 :(得分:4)

我在使用Apache 2.4.27的Ubuntu 17.10上遇到了相同的错误。

这似乎与Apache在操作系统上讨论文件锁定有关。当我进入/etc/apache2/apache2.conf并将Mutex flock添加到Mutex部分(在ServerRoot部分附近)时,似乎已经解决了该问题。

不幸的是,我只能说它使用flock()函数(系统调用?)来处理文件锁定。每个https://httpd.apache.org/docs/2.4/mod/core.html#mutex

所以这有点像个黑魔法,因为我个人对Apache的文件锁定行为还不够熟悉,无法说明它为什么起作用,而我只能说它起作用是因为Apache崩溃似乎已经停止了,但只有这样远。但是,它可能会对您有所帮助,而且风险似乎较低。

答案 1 :(得分:2)

虽然肖恩(Sean)解决方案有效,但我学到了另一种解决此问题的方法。

首先,您应该知道此问题与在Ubuntu上使用Certbot和SSL证书有关。

现在,要在不做任何不确定的事情的情况下解决问题,只需执行此操作(以root或sudo身份):

  1. 创建以下文件:/etc/apache2/conf-available/mutex-file.conf
  2. 在新创建的文件内添加Mutex file:${APACHE_LOCK_DIR} default
  3. 使用a2enconf mutex-file.conf启用新的配置文件
  4. 使用systemctl restart apache2重新启动Apache

但是,嘿,默认情况下已启用它!为什么要为此制作文件?

我找到这个解决方案时还是一样。

一个或另一个奇迹似乎是,一旦您开始使用SSL证书,此配置行就会以某种方式被“忽略”。
因此,Apache无法找到互斥文件的锁定目录。

仅将此行添加(删除评论)到/etc/apache2/apache2.conf也不起作用。
您必须专门创建一个配置文件并启用它。
否则无法解决问题。

答案 2 :(得分:1)

在我的情况下,为我制定了以下步骤。

  1. 通过SSH连接到服务器

  2. 编辑/etc/apache2/apache2.conf文件。在命令下面,我使用了nano编辑器,您可以使用自己喜欢的编辑器

  

sudo nano /etc/apache2/apache2.conf

  1. 搜索“互斥”部分

  2. 添加以下行,

  

Mutex posixsem

  1. 保存并关闭文件。

  2. 在运行Apache

  3. 命令以重新启动Apache服务之前,请检查配置。
  

sudo apachectl configtest

  1. 如果通过上述检查一切正常,请重新启动Apache服务
  

sudo服务apache2重新启动

希望这对某人有帮助。

答案 3 :(得分:0)

您尚未共享完整的日志跟踪。可能是:

  

[2019年7月21日星期日15:49:43] [错误](12)无法分配内存:fork:   无法派生新进程

这是由于内存不足和apache无法创建新进程所致。它还取决于您已配置它进行派生的进程数。当网站上的流量过多时,就会发生这种情况。