我无法find为什么Apache正常运行几天后挂起。
这里是顶部的内存sorting输出
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的东西…
在build议的现有线程中指定的设置服务器状态。 过程大小看起来过多。 这看起来像你可能有内存泄漏。
我发现设置MaxRequestsPerChild为1000或100,可以帮助当有代码中的内存泄漏或其他问题。 这通常会在导致问题发生之前将stream程杀死。 这可能会给你时间来追踪问题。
一个完整的Apache挂起是非常罕见的事情发生。
如果您在这些挂机时间周围阅读Apache的访问/错误日志,该怎么办? 每次发生什么特定的URL都会被访问?
您的安装是基本的Apache + PHP + MySQL安装,还是您有更特别的安装。 比如像xCache安装的一些PHP操作码caching?
那么httpd.conf怎么样? 你有没有设置一些非常长的超时值? 你有KeepAlive打开或closures?
apachetop命令在debugging过程中也很有帮助。
编辑 :有时在.htaccess或PHP代码错误的redirect可能会导致一些非常戏剧性的服务器崩溃。 如果你有一个.htaccess文件,包含像
ErrorDocument 404 http://yourserver/notfound.html
而且该文件不存在,Apache进入非常快速的redirect循环,在几秒钟内就搞砸了。
一个正确的ErrorDocument行应该是这样的
ErrorDocument 404 /some/path/notfound.html
此外,Apache重写模块是非常有能力崩溃你的服务器有一些错误的重写规则。 Mod_rewrite是巫术。 该死的酷,但仍然巫术,有时是一个非常有效的大规模杀伤性武器。
已经有一个可以帮助你的信息。
我build议你首先尝试一下接受的关于“服务器状态”的post,然后我推荐:更改LogLevel。
看起来他们都在等待磁盘I / O。
你可以使用strace -p <pid>来深入一点