1

我有一个运行 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进程太多。

现在我被困在这个问题上。任何人都可以提供一些建议吗?

4

1 回答 1

2

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

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

与您的开发人员检查该功能

于 2013-05-20T08:10:55.837 回答