Linux之慢盘检测

慢盘检测

  • 常见的慢盘检测工具
  • 判断方法
    • 判断磁盘为慢盘的阈值

前面介绍iostat的文章中提到过

  1. iostat工具没有任何一输出项表示的是硬盘设备平均每次IO的时间
  2. 也不能直接通过 /proc/diskstats 提供的统计值来准确地计算 I/O 在磁盘上的耗时

常见的慢盘检测工具

常见的慢盘检测工具例如,ARIES、华为IBMA都是通过周期性读取内核提供的统计信息(/proc/diskstats)来计算磁盘的平均 I/O 服务时间(svctm),并将服务时间划分为不同的3个等级level0/level1/level2,每个等级对应不同的加权值:

  • 轻微(level0): 0ms
  • 一般(level1):100ms
  • 严重(level2):200ms
  1. ARIES 慢盘判断方法:
  • 每1s中采集一次平均I/O服务时间,并判断 svctm 处在的权重区间,对应区间计数;
  • 每30分钟判断一次是否命中慢盘,判断方法:一般次数 * 1 + 严重次数 * 2 > 20% * 1800,则判定为慢盘;
  • 对于命中为慢盘,则标记为本周期内命中慢盘次数+1;
  • 一天24h内,命中慢盘次数超过80%,则直接调用坏盘逻辑。
  1. 华为提供的慢盘判断方法:
  • 每1s中采集一次平均I/O服务时间(svctm),并判断 svctm 处在的权重区间,对应区间计数;
  • 每5分钟判断一次是否命中慢盘,判断方法:一般次数 * 1 + 严重次数 * 2 > 20% * 300,则判定为慢盘;
    两种方法都依赖于计算的 svctm, 实际上这个值在新版本的 iostat 中被废弃,因为它并不能代表实际的 I/O服务时间。

判断方法

尽管如此,还是可以通过iostat中计算svctm的方法来预估每IO的平均服务时间。
(虽然blktrace能够追踪每次 I/O 将 request 提交给驱动到请求完成的耗时,但是 blktrace 会增加I/O 的耗时从而影响性能)

  • 理由如下:
    虽然 svctm 不能准确地表示I/O的服务时间,但是当出现慢盘时,无论传统的 sata hdd 盘还是 nvme ssd,svctm 都会因为单次 I/O 耗时增加而增加,svctm 会增加到几百毫秒,甚至几千毫秒。 所以继续使用 svctm 来判断慢盘。

判断磁盘为慢盘的阈值

磁盘类型 level1(ms) level2(ms)
hdd 30 60
sata ssd 20 40
nvme ssd 10 20

说明: 值除了 hdd 的阈值有据可循, 其他两种磁盘都是推算值

  • 普通 sata ssd 读QPS 能达到 五百以上, 所以当 iops 下降到 50, 说明磁盘已经出现慢盘
  • nvme ssd iops 能达到一千到几十万, 当iops 下降到 100, 说明磁盘已经出现慢盘

每 1s 中采集一次 /sys/block/disk name/stat, 并计算svctm,并判断 svctm 处在的权重区间,对应区间计数;

  1. 当本次计算的平均 svctm 超过报警值就将慢盘次数加1,如果平均耗时超过危险值就将慢盘次数加2;
    慢盘次数 = 一般次数 * 1 + 严重次数 * 2
  2. 如果过去一段时间内(默认3分钟)慢盘次数超过统计次数的 20% 则报警慢盘(总数 = 3*60 - 没有请求的秒);
  3. 如果过去一长段时间内(默认30分钟)磁盘被报警慢盘周期(一个周期为3分钟)次数超过 20%(除去没有请求的周期),则报警慢盘
  4. 如果过去一长段时间内(默认180分钟)磁盘被报警慢盘周期次数超过 80%(除去没有请求的周期),磁盘则在保证数据安全的前提下不提供服务

你可能感兴趣的:(Linux,linux,运维)