Apache2 服务器停止响应

Apache2 服务器停止响应

我正在寻找关于应该在哪里深入挖掘的建议。

很快,Apache2 服务器在启动 2-15 小时后就会停止处理请求。结果我不得不花上service apache2 restart半天时间做这件事。

长版本:

  1. 我正在专用服务器(Ubuntu 13.04)上运行一些网站(Apache 2.2.22 构建于 2013 年 7 月 12 日)。
  2. Apache2 服务器已经运行良好半年多了,现在突然停止处理所有网站(大约 5 个网站)上的请求,直到 apache 进程重新启动。
  3. 我在 /var/log/apache 中找不到与该问题有关的任何异常日志。
  4. service apache2 status报告该进程正在运行

很高兴听到您的建议,以及我该如何处理我的情况。

更新:

跑步netstat -an | grep 80

tcp6       0      0 :::80                   :::*                    LISTEN
tcp6     325      0 SERV_IP:80       IP_A:35514     CLOSE_WAIT
tcp6     332      0 SERV_IP:80       IP_B:34198     CLOSE_WAIT
tcp6     379      0 SERV_IP:80       IP_C:57859     CLOSE_WAIT
tcp6       0      0 SERV_IP:80       IP_A:35060     CLOSE_WAIT
tcp6     360      0 SERV_IP:80       IP_A:38481     CLOSE_WAIT
tcp6     466      0 SERV_IP:80       IP_B:56324     CLOSE_WAIT
tcp6     361      0 SERV_IP:80       IP_A:53466     CLOSE_WAIT
tcp6       1      0 SERV_IP:80       IP_A:38102     CLOSE_WAIT
tcp6     196      0 SERV_IP:80       IP_E:58125     ESTABLISHED

还有更多类似的条目,大约有 150 条。

ps aux | grep apache

root      2968  0.0  0.0 452240 21116 ?        Ss   16:08   0:01 /usr/sbin/apache2 -k start
www-data  5217  0.0  0.0 463584 23820 ?        S    17:04   0:03 /usr/sbin/apache2 -k start

后面的行(www-data)大约有 120 行,因此我假设有 120 个 apache 进程?

strafe在 apache2 root 进程上使用:

 sudo strace -f -p 2968
Process 2968 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 264394}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0

在其中一个 www-data 进程上使用:

sudo strace -f -p 8554
Process 8554 attached - interrupt to quit
flock(40, LOCK_EX

哇哦,在我看来,Apache 进程好像不知何故卡住了,一旦超过最大连接限制,它就会停止创建新实例。但它们为什么会卡住呢?

htop、iotop、jnettop 没有报告任何异常。(没有过载)

更新 2:过去两天服务器不再崩溃。所以我无法获取更多信息。相反,我感谢您的帮助并接受答案。一旦有更多信息可用,我将留下一个链接,指向一个结构更好的新问题。谢谢

答案1

无论“service apache2 status”报告什么,当您执行 ps aux 时是否看到 apache 进程?

问题发生时,您可以执行 netstat -n 吗?也许您用尽了资源(例如文件描述符),或者打开了太多连接。

出现问题时,您的 CPU 利用率是否很高?系统内存是否用尽,是否出现抖动?

http 服务器响应“连接被拒绝”或“连接超时”?

对于后一种情况,我建议执行 strace -f -p [apachepid],您可能会发现哪个系统调用阻止了请求。对于前一种情况,可能是 apache 崩溃了。

您是否代理 Tomcat 或其他应用程序服务器,或者您是否提供纯静态 html?

您是否配置了身份验证?例如,身份验证层可能出现问题

更新:

在第二个 strace 中,我看到了这个 flock(40,LOCK_EX 也许进程试图在某处获取独占锁?您可以执行 lsof -n -p 8554 (或任何 pid 尝试 flock)并查看它尝试锁定哪个文件(40 是文件描述符)。您也可以“ls /proc/8554/fd”

相关内容