![当我关闭 FTP 服务器时](https://linux22.com/image/1159979/%E5%BD%93%E6%88%91%E5%85%B3%E9%97%AD%20FTP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6.png)
我的系统是 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