Ubuntu Apache关机-无法';t抓取互斥

Ubuntu Apache关机-无法';t抓取互斥,ubuntu,apache2,apache2.4,ubuntu-18.04,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 re

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

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

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

不幸的是,我只能说,这使用flock()函数(系统调用?)来处理文件锁定。


因此,这是一个有点神奇的修复,因为我个人对Apache的文件锁定行为还不太熟悉,无法解释它为什么会起作用,我只能说它起作用是因为Apache崩溃似乎已经停止了,但只是到目前为止。不过,它可能会对您有所帮助,而且风险似乎相当低。

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

[Sun Jul 21 15:49:43 2019][error](12)无法分配内存:fork: 无法派生新进程


这是由于内存不足和apache无法创建新进程造成的。它还取决于您将其配置为fork的进程数。当网站上的流量过大时,就会发生这种情况

虽然肖恩的解决方案是有效的,但我学会了解决这个问题的另一种方法

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

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

  • 创建以下文件:
    /etc/apache2/conf available/mutex file.conf
  • 在新创建的文件中添加
    Mutex文件:${APACHE\u LOCK\u DIR}default
  • 使用
    a2enconf互斥文件启用新配置文件
  • 使用
    systemctl Restart apache2重新启动Apache
  • 但是,嘿,它已经默认启用了!为什么要为此制作一个文件

    当我找到这个解决方案时,我也这么想

    奇怪的是,一旦您开始使用SSL证书,该配置行似乎不知何故被“忽略”。
    因此,Apache无法找到互斥文件的lock dir

    仅仅在
    /etc/apache2/apache2.conf
    中添加(删除注释)这一行也不起作用。
    您必须专门创建一个配置文件并启用它。

    否则它将无法解决问题。

    以下步骤对我的情况适用

  • 通过SSH连接到服务器

  • 编辑/etc/apache2/apache2.conf文件。下面的命令我使用了nano编辑器,你们可以使用你们最喜欢的编辑器

  • sudo nano/etc/apache2/apache2.conf

  • 搜索“互斥”部分

  • 添加以下行

  • 互斥posixsem

  • 保存并关闭文件

  • 在运行命令重新启动Apache服务之前,请检查配置

  • sudo apachectl configtest

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


    希望这对某人有所帮助。

    谢谢您的回复。我会在晚些时候检查这个。会让你随时更新的。你好,肖恩。仅供参考,我用我刚才找到的自己的解决方案回答这个问题。您的参数仍然有效,但请注意避免篡改未知参数。看一看……;)我也有同样的问题,它发生在log rotate事件上。你解决了吗?我添加了所有与错误相关的行。这是一个与Certbot和SSL证书的使用相关的问题。出于这样或那样的原因,一旦您使用SLL证书,
    mutex
    默认值未被“找到”,您必须手动设置它。使用
    互斥文件:${APACHE_LOCK_DIR}default
    创建一个文件
    /etc/apache2/conf available/mutex file.conf
    ,并启用它,效果很好。我刚刚将互斥文件更新为posixsem,看起来效果不错。需要更多的测试。但是,他说“如果进程中持有互斥锁的线程发生故障,信号量所有权将无法恢复,从而导致Web服务器挂起。”我不理解这一点。你对此有什么想法吗?谢谢你的解决方案。请重新检查您的第2步,因为它似乎是一个打字错误。我不得不使用
    a2enconf互斥文件
    (没有conf)。@icasimpan抱歉“吹毛求疵”。。。这可能是个错误,但我不会把它归类为打字错误。打字错误——至少用外行的术语来说——只是拼写错误,主要是出于匆忙,有时是出于对实际拼写的了解——通常是偶然的,而不是校对。