Load Average在故障排查时的运用

在上一篇文章讲述了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密集型、两者混部),在系统响应速度异常时,快速定位原因。本文通过简单命令模拟了业务的类型,介绍了相应的思路,读者可结合自己所运维的业务实践一下。

排列文字,重组感受。

我是曲行人,日常写码,闲时写点儿文字,

我将在大脑里的思维原子做布朗运动时,输出文字。

二维码:

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180117G06R0K00?refer=cp_1026

扫码关注云+社区