通过IO HANG诊断并排查磁盘繁忙问题

当您往磁盘的所在目录读写文件或对磁盘有IO访问行为时,如果磁盘出现卡死或几秒、几十秒、甚至分钟的卡顿,则推荐您通过IO HANG诊断并排查磁盘。

前提条件

OS监控与诊断处于公测阶段,请提交工单申请加入白名单。

背景信息

IO HANG的现象与危害

由于等待资源,IO路径可能会存在夯的可能。从业务稳定性角度来看,对于有IO访问需求的业务进程,IO HANG可能会引起进程长期阻塞,且在IO路径恢复之前,都无法对外提供服务。从系统稳定性角度来看,IO HANG可能会引起大量的进程进入等待状态,导致系统高负载,甚至系统夯住,shell命令无法执行,机器无法登录,最终必须重启系统。

IO HANG诊断的作用

IO HANG诊断可用于检测当前系统中的IO HANG事件并确定问题边界,即是磁盘原因,还是OS原因,为进一步的根因分析给出指导意见。

IO HANG诊断的优势

  • IO HANG诊断的输出信息准确且结果直观,即使您不具备内核IO子系统知识也能快速上手。

  • IO HANG诊断主要聚焦在检测系统中是否存在IO HANG问题并对问题进行定界,同时诊断功能会进一步帮助您缩小排查范围,将问题原因缩小到某一块流程上,并且给出一些关键的数据指标来辅助您进行根因分析。

使用限制

诊断中心单次最多支持诊断5个实例。

步骤一:查看IO监控

前提条件:请确保您已开启目标主机的SysOM插件。具体操作,请参见开启SysOM插件

先通过IO监控,识别出IO HANG异常,再进行IO HANG诊断。

  1. 登录云监控控制台

  2. 在左侧导航栏,选择云资源监控 > OS监控与诊断 > 监控中心

  3. 监控中心,先选择目标主机,再单击IO监控页签,然后查看其监控指标每分钟io hang次数IO繁忙度的监控图标。

    以下现象,说明IO HANG异常:

    • 每分钟io hang次数大于1。

    • 在没有任何IO的情况下,IO繁忙度持续100%。

步骤二:发起诊断

发起IO HANG诊断,并查看诊断结果,确定问题边界。

  1. 在左侧导航栏,选择云资源监控 > OS监控与诊断 > 诊断中心

  2. 诊断中心,先单击IO诊断页签,再单击IO HANG诊断页签,然后单击发起诊断

  3. IO HANG诊断对话框,选择待诊断的实例,其他参数均保持默认值。

    说明

    如果待诊断的实例未开启SysOM插件,云监控可以一键为该实例安装SysOM插件,再执行诊断操作。

  4. 单击确定

  5. 查看诊断结果。

    • 当诊断任务的诊断状态诊断任务运行超时或诊断任务运行失败时,您可以单击其对应操作列的查看失败原因

    • 当诊断任务的诊断状态诊断任务运行成功时,您可以单击其对应操作列的查看诊断结果

      • IO HANG overview区域,如果Check Result显示绿色字样Normal且另外两个参数均显示0,则表示未出现IO HANG。

      • IO HANG overview区域,如果Check Result显示红色字样的Abnormal且另外两个参数均有数值,则表示出现IO HANG。

        image

        • IO HANG overview区域,参数及其含义如下表所示。

          参数

          描述

          Number of OS HANG

          夯在OS中的IO数,例如:9,表示有9个IO夯在OS中。

          Number of Disk HANG

          夯在磁盘中的IO数,例如:1540,表示有1540个IO夯在磁盘中。

          说明

          IO HANG诊断主要起到问题定界的作用,即检测系统中是否存在IO HANG问题。如果存在IO HANG问题,则您需要先完成问题定界,即IO HANG是磁盘问题,还是OS问题,同时给出一些关键的数据指标来辅助专家做进一步的根因分析,具体问题如下:

          • 如果Number of Disk HANG中的数值高,则说明是磁盘问题。

          • 如果Number of OS HANG中的数值高,则说明是OS问题。

        • More details of TOP 10 IO区域,只展示10个夯住时间最长的IO的详细信息,单个IO的参数及其含义如下表所示。

          参数

          描述

          comm

          进程名称。

          abnormal

          异常位置。

          file

          操作文件名称。

          iostate

          IO状态。

          cpu

          发出该IO的CPU编号。

          pid

          进程号。

          time

          检测到IO事件的时间点。

          sector

          扇区号。

          datalen

          数据量。

          iotype

          IO类型。