在上一篇文章讲述了Load Average的概念【运维工作笔记】理解load average,本文讲述在故障排查时的运用。
实际工作中,经常会遇到服务响应慢的问题,如果熟悉Load Average和CPU、IO之间的关系,一般可以快速定位问题。
目录
1、状态为R和D的任务
状态为R,表示正在运行,或者处于运行队列,可以被调度运行。
状态为D,表示uninterruptible sleep,这种状态是不可中断的,无论是kill,kill -9,还是kill -15。
处于D状态的进程通常是在等待IO,比如磁盘IO,网络IO,其他外设IO。
如果处于D状态的时间较长,意味着可能是IO设备本身出了故障,需要排查设备是否正常。
2、CPU使用率高,IO无作业,Load Average低,系统反应颠簸
这种场景,通常是计算密集型任务,即大量生成耗时短的计算任务。
这种任务会占满CPU资源,造成系统响应速度颠簸,但由于每个任务能快速计算完成,不会在运行队列堆积,所以在Load Average里不会体现出来。
python示例程序占满CPU,但LoadAvergae不高
3、CPU使用率低,IO等待,Load Average高,系统不卡
Load Average高,dd程序都处于D状态
示例命令,大量写小文件:dd if=/dev/zero of=testx.img bs=512count=1000000 oflag=dsync
这种场景,通常是IO密集型任务,如果大量请求都集中于相同的IO设备,超出设备的响应能力,会造成任务在运行队列里堆积等待,也就是D状态的进程堆积,那么此时Load Average就会飙高。
由于任务都处于等待状态,所以Load Average的值虽然很高,但系统响应速度不受影响。
4、CPU使用率低,IO繁忙,Load Average低,系统卡
这种场景,通常是低频大文件读写,由于请求数量不大,所以任务都处于R状态,Load Average数值反映了当前运行的任务数,不会飙升,IO设备处于满负荷工作状态,导致系统响应能力降低。
IO设备满负荷工作
示例命令,少量写大文件:dd if=/dev/zero of=testx.img bs=5120000count=10000 oflag=dsync
dd程序都处于R状态
5、CPU使用率高,IO繁忙/等待,Load Average高,系统卡
这种场景,通常是服务混部,即IO、计算密集型任务混部在一起,相当于CPU、IO都处于高负荷状态,那么Load Average自然很高。
总结
可以根据业务的特性(CPU、IO密集型、两者混部),在系统响应速度异常时,快速定位原因。本文通过简单命令模拟了业务的类型,介绍了相应的思路,读者可结合自己所运维的业务实践一下。
排列文字,重组感受。
我是曲行人,日常写码,闲时写点儿文字,
我将在大脑里的思维原子做布朗运动时,输出文字。
二维码:
领取专属 10元无门槛券
私享最新 技术干货