Centos服务器因D状态下的httpd进程过多而崩溃

时间:2013-05-18 00:54:17

标签: linux apache centos

我有一个运行httpd,mysql,memcached和postfix的Centos服务器。 通常,我的服务器负载正常

Usage: /usr/sbin/httpd [-D name] [-d directory] [-f file]
top - 07:43:55 up  9:38,  1 user,  load average: 1.04, 1.08, 1.11
Tasks: 236 total,   1 running, 234 sleeping,   0 stopped,   1 zombie
Cpu(s):  4.2%us,  1.0%sy,  0.0%ni, 93.6%id,  1.1%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8015636k total,  5743920k used,  2271716k free,   254304k buffers
Swap:  8392696k total,        0k used,  8392696k free,  4224184k cached

但有时崩溃(httpd无效,无法将ssh连接到服务器),我需要让数据中心重新启动才能ssh。

重新连接到服务器后,我检查top命令,看到服务器负载平均值仍然很高(超过100),CPU(等待)超过70%,并且D中的httpd进程太多州。

现在我坚持这个问题。有人可以提供一些建议吗?

1 个答案:

答案 0 :(得分:2)

该过程将被置于一种特殊的睡眠状态,称为“D”或“磁盘睡眠”。这是特殊的,因为在这种状态下不能杀死或中断该过程。这种状态很糟糕,因为你无法对D状态的进程做任何事情。如果发生这种情况,非常重要的是确定这个不幸的睡眠发生的位置。使用带有l选项的ps命令很容易。 WCHAN列显示进程处于休眠状态的内核函数的名称:

  

ps axl | awk'$ 10~ / D /'

与开发人员一起检查该功能