当我关闭 FTP 服务器时

当我关闭 FTP 服务器时

我的系统是 Ubuntu 18.04、Apache2、PHP 7.2。当我从 Winscp 或 Filezilla 访问 FTP 时,我遇到了一个非常奇怪的问题。

问题是,在我终止 FTP 会话并尝试访问我的网站后,我收到无法访问该网站的提示。我必须重新启动 Apache2 才能使该网站再次正常运行。

我该如何解决这个问题?

Apache 日志:

[Wed Aug 29 12:26:20.658550 2018] [core:warn] [pid 6112] AH00098: pid file /var/run/apache2/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Wed Aug 29 12:26:20.664959 2018] [mpm_prefork:notice] [pid 6112] AH00163: Apache/2.4.29 (Ubuntu) OpenSSL/1.1.0h configured -- resuming normal operations
[Wed Aug 29 12:26:20.665014 2018] [core:notice] [pid 6112] AH00094: Command line: '/usr/sbin/apache2'
[Wed Aug 29 12:27:27.563287 2018] [mpm_prefork:emerg] [pid 6121] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:27:27.566692 2018] [mpm_prefork:emerg] [pid 6120] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:27:27.571578 2018] [mpm_prefork:emerg] [pid 6125] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:27:27.573969 2018] [mpm_prefork:emerg] [pid 6129] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:27:27.577938 2018] [mpm_prefork:emerg] [pid 6128] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:27:27.744667 2018] [core:alert] [pid 6112] AH00050: Child 6120 returned a Fatal error... Apache is exiting!
[Wed Aug 29 12:27:27.744807 2018] [:emerg] [pid 6112] AH02818: MPM run failed, exiting
[Wed Aug 29 12:27:33.534483 2018] [core:warn] [pid 6425] AH00098: pid file /var/run/apache2/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Wed Aug 29 12:27:33.551045 2018] [mpm_prefork:notice] [pid 6425] AH00163: Apache/2.4.29 (Ubuntu) OpenSSL/1.1.0h configured -- resuming normal operations
[Wed Aug 29 12:27:33.551087 2018] [core:notice] [pid 6425] AH00094: Command line: '/usr/sbin/apache2'
[Wed Aug 29 12:33:23.273811 2018] [mpm_prefork:notice] [pid 6425] AH00169: caught SIGTERM, shutting down
[Wed Aug 29 12:33:23.463364 2018] [mpm_prefork:notice] [pid 6566] AH00163: Apache/2.4.29 (Ubuntu) OpenSSL/1.1.0h configured -- resuming normal operations
[Wed Aug 29 12:33:23.463471 2018] [core:notice] [pid 6566] AH00094: Command line: '/usr/sbin/apache2'
[Wed Aug 29 12:34:12.206500 2018] [mpm_prefork:emerg] [pid 6686] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:34:12.534263 2018] [core:alert] [pid 6566] AH00050: Child 6686 returned a Fatal error... Apache is exiting!
[Wed Aug 29 12:34:12.534321 2018] [:emerg] [pid 6566] AH02818: MPM run failed, exiting
[Wed Aug 29 12:34:12.536893 2018] [mpm_prefork:emerg] [pid 6689] (22)Invalid argument: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:34:12.539094 2018] [mpm_prefork:emerg] [pid 6688] (22)Invalid argument: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:36:21.687348 2018] [core:warn] [pid 9332] AH00098: pid file /var/run/apache2/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Wed Aug 29 12:36:21.709583 2018] [mpm_prefork:notice] [pid 9332] AH00163: Apache/2.4.29 (Ubuntu) OpenSSL/1.1.0h configured -- resuming normal operations
[Wed Aug 29 12:36:21.709650 2018] [core:notice] [pid 9332] AH00094: Command line: '/usr/sbin/apache2'
[Wed Aug 29 12:39:10.500747 2018] [mpm_prefork:emerg] [pid 9347] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:39:10.502052 2018] [mpm_prefork:emerg] [pid 9336] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:39:10.507276 2018] [mpm_prefork:emerg] [pid 9337] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:39:10.509953 2018] [mpm_prefork:emerg] [pid 9338] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:39:10.514020 2018] [mpm_prefork:emerg] [pid 9346] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:39:10.522017 2018] [mpm_prefork:emerg] [pid 9343] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Wed Aug 29 12:39:10.850698 2018] [core:alert] [pid 9332] AH00050: Child 9336 returned a Fatal error... Apache is exiting!
[Wed Aug 29 12:39:10.851450 2018] [:emerg] [pid 9332] AH02818: MPM run failed, exiting
[Wed Aug 29 12:39:19.905390 2018] [core:warn] [pid 9605] AH00098: pid file /var/run/apache2/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Wed Aug 29 12:39:19.924748 2018] [mpm_prefork:notice] [pid 9605] AH00163: Apache/2.4.29 (Ubuntu) OpenSSL/1.1.0h configured -- resuming normal operations
[Wed Aug 29 12:39:19.924789 2018] [core:notice] [pid 9605] AH00094: Command line: '/usr/sbin/apache2'

答案1

我找到了解决方案,解决方案:

使用 连接到服务器SSH。编辑/etc/apache2/apache2.conf文件设置:

Mutex posixsem

代替Mutex file:${APACHE_LOCK_DIR} default

重新启动 apache 服务:

service apache2 restart

答案2

让我补充一点你的回答 Fathey Abdel Slam。来自这里

互斥锁是 Traffic Server 中使用的一种基本同步方法,用于保护数据不被多个线程同时访问。互斥锁充当锁,保护一个程序线程中的数据不被另一个线程访问。

来自/etc/apache2/apache2.conf

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# NOTE!  If you intend to place this on an NFS (or otherwise network)
# mounted filesystem then please read the Mutex documentation (available
# at <URL:http://httpd.apache.org/docs/2.4/mod/core.html#mutex>);
# you will save yourself a lot of trouble.

可以使用以下互斥机制:

  • 默认 | 是

    这将选择由 APR 确定的默认锁定实现。可以通过使用 -V 选项运行 httpd 来显示默认锁定实现。

  • 无 | 否

    这实际上禁用了互斥锁,并且仅当模块指示互斥锁是有效选择时才允许使用互斥锁。有关详细信息,请参阅模块文档。

  • 正则表达式

    这是一个基于 Posix 信号量的互斥变体。

    警告

    如果持有互斥锁的进程中的线程发生段错误,则无法恢复信号量所有权,从而导致 Web 服务器挂起。

  • 系统管理

    这是一个基于 SystemV IPC 信号量的互斥变体。警告

    如果进程在信号量被移除之前崩溃,则可能会“泄漏” SysV 信号量。安全性

    信号量 API 允许任何在与 Web 服务器相同的 uid 下运行的 CGI(即所有 CGI,除非您使用 suexec 或 cgiwrapper 之类的程序)发起拒绝服务攻击。

  • 扫描电镜

    这将选择“最佳”可用的信号量实现,按顺序在 Posix 和 SystemV IPC 信号量之间进行选择。

  • 线程

    这是一个基于跨进程 Posix 线程互斥锁的互斥锁变体。警告

    在大多数系统中,如果子进程在持有使用此实现的互斥锁时异常终止,则服务器将死锁并停止响应请求。发生这种情况时,服务器将需要手动重启才能恢复。

    Solaris 和 Linux 是显著的例外,因为它们提供了一种机制,通常允许在子进程持有互斥锁并异常终止后恢复互斥锁。

    如果您的系统符合 POSIX 标准或者实现了 pthread_mutexattr_setrobust_np() 函数,那么您可能能够安全地使用 pthread 选项。

  • fcntl:/路径/到/互斥

    这是一个互斥锁变体,其中使用物理(锁定)文件和 fcntl() 函数作为互斥锁。警告

    当在多线程、多进程环境中使用基于此机制的多个互斥锁时,如果 fcntl() 不具有线程感知能力(例如在 Solaris 上),则可能会对有效的互斥锁操作报告死锁错误(EDEADLK)。

  • 羊群:/路径/到/互斥

    这与 fcntl:/path/to/mutex 方法类似,不同之处在于使用 flock() 函数来提供文件锁定。

  • 文件:/路径/到/互斥

    这将选择“最佳”可用的文件锁定实现,按顺序在 fcntl 和 flock 之间进行选择。

大多数机制仅在特定平台上可用,底层平台和 APR 均支持该机制。并非所有平台都可用的机制包括 posixsem、sysvsem、sem、pthread、fcntl、flock 和 file。

对于基于文件的机制fcntl和 flock,如果提供了路径,则路径是将在其中创建锁定文件的目录。默认目录是相对于 的 httpd 运行时文件目录ServerRoot。始终对 /path/to/mutex 使用本地磁盘文件系统,而不要使用位于 NFS 或 AFS 文件系统上的目录。

basename文件的 将是模块mutex type提供的可选实例字符串 ,并且除非OmitPID keyword指定 ,否则将附加 httpd 父进程的进程 id 以使文件名唯一,避免多个 httpd 实例共享锁文件目录时发生冲突。

例如,如果互斥锁名称为 mpm-accept 且锁文件目录为/var/httpd/locks,则父进程 ID 为 12345 的 httpd 实例的锁文件名为/var/httpd/locks/mpm-accept.12345

来源:

http://httpd.apache.org/docs/2.4/mod/core.html#mutex

https://docs.trafficserver.apache.org/en/4.2.x/sdk/mutex-guide.en.html

相关内容