我无法找到为什么 Apache 在正常运行几天后就挂起了。
以下是按内存排序的 top 的输出
top - 14:51:45 up 1 day, 18:02, 3 users, load average: 6.73, 5.15, 6.27
Tasks: 233 total, 1 running, 226 sleeping, 0 stopped, 6 zombie`
Cpu(s): 34.0%us, 13.8%sy, 0.0%ni, 3.2%id, 48.3%wa, 0.0%hi, 0.8%si, 0.0%st
Mem: 4043688k total, 3943568k used, 100120k free, 46784k buffers
Swap: 1051376k total, 659504k used, 391872k free, 372016k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17156 apache 40 0 271m 204m 5800 S 0.0 5.2 0:10.53 httpd
16735 apache 40 0 273m 204m 5504 S 0.0 5.2 0:05.32 httpd
17532 apache 40 0 271m 204m 5188 S 81.1 5.2 0:07.83 httpd
17904 apache 40 0 271m 204m 5396 S 0.0 5.2 0:09.81 httpd
17177 apache 40 0 271m 203m 5248 S 0.0 5.2 0:05.63 httpd
19507 apache 40 0 271m 203m 5272 S 0.0 5.2 0:05.14 httpd
16734 apache 40 0 271m 203m 5380 S 0.0 5.2 0:10.20 httpd
18571 apache 40 0 271m 203m 5240 S 0.0 5.2 0:05.05 httpd
19492 apache 40 0 271m 203m 5212 S 0.0 5.2 0:05.30 httpd
19506 apache 40 0 271m 203m 5188 S 0.0 5.2 0:10.28 httpd
19497 apache 40 0 271m 203m 5172 S 0.0 5.2 0:07.65 httpd
17527 apache 40 0 271m 203m 5240 S 0.0 5.2 0:05.03 httpd
19144 apache 40 0 271m 203m 5220 S 0.0 5.2 0:02.58 httpd
19145 apache 40 0 271m 203m 5152 S 0.0 5.2 0:02.60 httpd
17165 apache 40 0 271m 203m 5104 S 0.0 5.1 0:02.63 httpd
17900 apache 40 0 271m 203m 4576 S 0.0 5.1 0:05.08 httpd
17174 apache 40 0 271m 193m 5300 S 0.0 4.9 0:10.04 httpd
16742 apache 40 0 271m 84m 5468 S 0.0 2.1 0:20.03 httpd
19812 apache 40 0 100m 33m 4812 D 7.6 0.8 0:00.23 httpd
16741 apache 40 0 271m 18m 5700 S 0.0 0.5 0:08.16 httpd
5095 root 40 0 84448 13m 4388 S 0.0 0.3 0:14.79 httpd
4511 named 40 0 51340 10m 1128 S 0.0 0.3 2:13.22 named
4697 mysql 40 0 153m 8964 2560 S 0.0 0.2 4:50.60 mysqld
16727 apache 40 0 73828 7752 444 S 0.0 0.2 0:00.00 httpd
4245 sso 40 0 28268 3224 1628 S 0.0 0.1 0:00.10 sw-engine-cgi
25520 root 40 0 68164 3052 276 D 0.0 0.1 1:58.79 tar
25473 psaadm 40 0 38364 2564 852 S 0.0 0.1 0:01.69 sw-engine
25512 root 40 0 14112 2432 808 S 0.0 0.1 0:00.78 python
4912 root 40 0 35160 1648 460 S 0.0 0.0 0:11.67 spamd
28823 root 40 0 12092 1556 1320 S 0.0 0.0 0:00.08 sshd
13713 root 40 0 12092 1444 1324 S 0.0 0.0 0:00.36 sshd
6829 root 40 0 12092 1440 1320 S 0.0 0.0 0:01.65 sshd
4240 sso 40 0 27204 1140 760 S 0.0 0.0 0:00.21 sw-engine-cgi
20409 qmailr 40 0 4908 1060 884 S 0.0 0.0 0:00.00 qmail-remote.mo
7073 root 40 0 5112 1032 816 S 0.0 0.0 0:00.01 bash
20135 qmaild 40 0 4920 1032 864 S 0.0 0.0 0:00.00 qmail-smtpd
19755 qmaild 40 0 4920 1028 856 S 0.0 0.0 0:00.00 qmail-smtpd
13757 root 40 0 4992 1016 804 S 0.0 0.0 0:00.00 bash
29109 root 40 0 2416 1016 724 R 0.0 0.0 0:06.99 top
20133 qmaild 40 0 4920 1000 832 S 0.0 0.0 0:00.00 qmail-smtpd
我做了一个strace -p [pid]
并发现这些进程正在执行正常的 Apache 操作......
答案1
在建议的现有线程中设置指定的服务器状态。进程大小看起来过大。这看起来您可能存在内存泄漏。
我发现将 MaxRequestsPerChild 设置为 1000 或 100 有助于解决代码中存在内存泄漏或其他问题的问题。这通常会在进程引发问题之前将其终止。这可以让您有时间追踪问题。
答案2
Apache 完全挂起是非常罕见的事情。
如果您在这些挂起时间附近阅读 Apache 的访问/错误日志会怎么样?每次发生这种情况时,是否会访问某个特定的 URL?
您的安装是基本的 Apache + PHP + MySQL 安装,还是安装了一些更奇特的东西。比如安装了一些 PHP 操作码缓存(如 xCache)?
httpd.conf 怎么样?您是否设置了一些非常长的超时值?并且您是否打开或关闭了 KeepAlive?
命令阿帕奇在调试期间也非常有用。
编辑:有时 .htaccess 或 PHP 代码中的错误重定向可能会导致一些非常严重的服务器崩溃。如果您的 .htaccess 文件包含类似以下行
ErrorDocument 404 http://yourserver/notfound.html
并且该文件不存在,Apache 将进入非常快速的重定向循环,在几秒钟内使一切变得混乱。
正确的 ErrorDocument 行应该是这样的
ErrorDocument 404 /some/path/notfound.html
此外,Apache 重写模块还可能因为某些错误的重写规则而导致服务器崩溃。Mod_rewrite 是巫术。非常酷,但仍然是巫术,有时还是一种极其有效的大规模杀伤性武器。
答案3
看起来他们都在等待磁盘 I/O。
你可以使用以下方法进行更深入的挖掘strace -p <pid>
答案4
已经有了一个线程提供对您有帮助的信息。
我建议您首先尝试有关“服务器状态”的已接受帖子,然后按照我的建议操作:更改 LogLevel。