服务器Load过高的原因
近期,总有几台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}'