日期:2014-05-16  浏览次数:21228 次

RHEL6.1 top命令下cpu %wa 为90%的奇怪现象
服务器安装的是RAID0(两块硬盘),每天中午和晚上的时候都会出现系统响应很慢的情况。一个命令要执行大约1分钟左右,整个服务器上面运行的程序都不能运行了,用top命令按1观察CPU的使用情况,结果如下:
Tasks:146   total,   4   running,   141   sleeping,   0   stopped,   1   zombie
Cpu0:   3.5%us,   3.0%sy,   0.0%ni,   22.1%id,   70.4%wa,   0.0%hi,   1.0%si,   0.0%st
Cpu1:   0.6%us,   0.8%sy,   0.0%ni,   6.5%id,     91.8%wa,   0.0%hi,   0.2%si,   0.0%st
Cpu2:   0.8%us,   0.8%sy,   0.0%ni,   12.7%id,   85.4%wa,   0.0%hi,   0.2%si,   0.0%st
Cpu3:   0.6%us,   0.6%sy,   0.0%ni,     2.3%id,   96.5%wa,   0.0%hi,   1.0%si,   0.0%st

我的程序是运行在Cpu1上面,平时的id%都是在85%以上的。不知道这是什么原因造成的,每次出现这种情况的时候,整个服务器上运行的程序基本上都不能提供服务了。
还有一个问题,我的程序里面有70多个线程在同时运行,但是用top命令观看到的我的程序只使用了cpu1,而没有使用其他cpu,这个正常吗?是不是没有充分利用多核的优势啊?



------解决方案--------------------
wa值高一般是高负载的磁盘IO造成的,你看服务器的硬盘灯是不是常亮

从你的top表上并没有只用cpu1啊
------解决方案--------------------
曾明有僵尸进程在哪里
------解决方案--------------------
LZ怀疑的,应用程序总占用cpu1,可以通过cat /proc/interrupts ,来进行确认,不过一般情况下,系统会平均负载每个cpu核心的中断数,所以LZ其实是不需要担心的


另外,从LZ提供的信息来看,cpu并不高,不知道此时的Load值如何,如果cpu不高,Load很高,基本可以判断是IO出现问题,检查此时硬盘和内存的IO情况吧。
------解决方案--------------------
1.检查crontab,看看每天的异常时间段,是否有什么特殊的任务
2.或者检查服务器上的access_log,检查异常的时间段,有哪些特定的访问
3.每隔几秒输出iostat信息到文件中,然后拉出来对比下时间和磁盘IO的特点。或者搞个cacti或者到“监控宝”上画出一个IO的曲线图看看特点