Apache 不断失败并且无法正常重启 - 地址已在使用中:make_sock:无法绑定到地址

Apache 不断失败并且无法正常重启 - 地址已在使用中:make_sock:无法绑定到地址

我有一个 VPS,内存 1GB,运行 CentOS 5.4

它还可以运行 plesk,并且大多数情况下许多 wordpress 网站都可以毫无问题地运行。

最近,Apache 似乎时常崩溃。如果您访问 www.mysite.com,它似乎会超时。

我尝试重新启动 apache 并出现以下错误。

Stopping httpd:                                            [FAILED]
Starting httpd: (98)Address already in use: make_sock: could not bind to address                                                [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

现在我 100% 确定除了 apache 之外,端口 80 上没有其他服务在运行。但 apache 似乎没有响应停止命令。它几乎就像被困在了边缘地带!

最后我发现我可以通过运行来手动强制 apache 停止

killall -9 httpd

然后重启命令就起作用了。

我的问题是:

1.) 什么原因会导致此类情况发生?据我所知,服务器没有收到任何重大流量。2.) 如果发生这种情况而我不在场手动执行该命令,我该如何在服务器上执行该操作以自动执行上述命令。

谢谢,

埃德

答案1

我在运行一些插件时遇到了类似的问题,在我诊断出哪个插件导致了该问题之前,我cron每小时都会终止并重新启动 apache 和 mysql。

答案2

这种问题(进程无法正常退出)通常是由于进程卡在等待 I/O(例如来自网络连接、本地管道、文件系统等)时引起的。有时您可以使用斯特拉斯弄清楚发生了什么,尽管strace有效地使用可能是一个完全不同的问题

输出结果如下附言命令行可能很有趣:

ps -e -o pid,wchan:20,cmd | grep httpd

这将告诉您“进程正在休眠的内核函数的名称”,这可能有助于指导您的调查。

答案3

我会在所有 Apache 配置文件中查找Listen指令,以验证您是否只有一个端口 80 上的监听。在 CentOS 6 中,ssl.conf 中有一个指令,如果您将另一个 http.conf 中的指令复制到 CentOS 6 框中,如果您不小心,您也会在 443 上遇到这个问题。

相关内容