近期,总有几台Server时不时报警,Load一度超过50

登录到Server上top看看情况,发现CPU的使用率并不高

无标题

而系统的iowait值也不高,但通过ps发现有不少状态为D(uninterruptible sleep)的进程

其中基本都是lxc-attach的进程,手工运行其中一个进程,发现进程被堵塞了

当把所有这些状态为D的进程都杀掉后,系统的Load就一下子降到正常水平了

在Linux平台上,Load除了和CPU的使用率有关外,还和系统中状态为D的进程数目多少有关

进程的状态为D,一般情况下都是因为IO wait ,参见:

http://en.wikipedia.org/wiki/Sleep_(system_call)#Uninterruptible_sleep

推荐一篇介绍Uninterruptable Sleep的文章,写的挺清楚的

http://justlinux.ca/tips/UninterruptableSleep

可以通过以下命令去查找状态为D的进程

ps -eo s,cmd |awk '{if($1 == "D") print;}'

top -b -n 1  |awk  '{if($8 == "D") {count++;print}} END {print count}'