当前位置:首页>Linux>Linux存储-磁盘I/O监控

Linux存储-磁盘I/O监控

  • 2026-09-10 18:03:56
Linux存储-磁盘I/O监控

     前几篇文章把linux系统环境中磁盘分区、文件系统格式化、性能优化等方面的介绍,本文继续讲述日常使用中常用的磁盘I/O的监控方法。

     通过本文内容,可以了解到通过哪些工具可以查看、监控磁盘的运行状态、是否存在性能瓶颈、是否存在硬件故障等信息。

一、磁盘监控的五个主要指标

1.磁盘I/O使用率:表示在一段时间范围内磁盘处理I/O的时间百分比;也就是磁盘IO处于读写工作的时间/总采样时间×100%。

2.磁盘饱和度:表示磁盘处理I/O的繁忙程度;直观说法就是请求磁盘I/O的队列拥堵程度,代表超出磁盘处理能力的积压请求量。当磁盘 I/O请求来得比磁盘处理速度快时,I/O会进入等待队列。饱和度数值越高,队列堆积越严重。当磁盘响应时间飙升时,若同步伴随高饱和度,确定是磁盘处理能力不足。

通常来说在磁盘顺序读写场景下饱和度低,随机读写场景下最为容易出现高饱和度。

3.磁盘IOPS:每秒的磁盘I/O请求数。通常机械磁盘的IOPS是两千IOPS;SATA SSD是几万IOPS;NVMe SSD可以达到几十万IOPS。

通常在磁盘I/O多的场景下,优先看IOPS上限,而非吞吐量;大文件场景下吞吐量较高,但IOPS很低;海量小文件IOPS高,吞吐量较低。

4.磁盘吞吐量:每秒请求磁盘I/O传输的数据总量(带宽)。

5.磁盘响应时间:磁盘I/O从发出请求到收到响应的时间间隔(队列排队等待时间+ 磁盘物理处理时间)。

二、磁盘监控的主要工具和方法

    Linux系统环境中用于对磁盘运行状态监控的工具和方法很多,以下主要简单介绍常用的磁盘运行状态监控工具:iostat、vmstat。

1.iostat

主要监控磁盘读写性能(如吞吐量、IOPS、延迟等),同时也显示CPU利用率和磁盘负载;iostat属于sysstat工具包,多数Linux系统都自带安装此软件包。

      用法示例:iostat -xm 2 (每两秒输出磁盘采样结果,以MB为单位)

字段参数说明:

(1)avg-cpu:这段主要显示cpu运行信息。

  • %user:表示用户态进程占用CPU的百分比。

  • %nice:表示用户态中具有nice优先级的进程占用CPU 的百分比。

  • %system:表示内核态进程占用CPU的百分比。

  • %iowait:表示CPU等待I/O操作完成所花费的时间百分比。如果该值较高,说明系统I/O操作较为繁忙,可能存在I/O瓶颈。

  • %steal:表示被虚拟机管理程序偷走的CPU时间百分比,通常在虚拟机环境中才有意义。

  • %idle:表示CPU处于空闲状态的时间百分比。

(2)Device:这段主要显示系统中的各种存储设备运行信息。

  • rrqm/s:每秒合并的读请求数。就是当系统有多个读I/O请求发往同一磁盘扇区时,内核会将这些请求合并为一个请求,以提高I/O效率。

  • wrqm/s:每秒合并的写请求数,原理与rrqm/s类似。

  • r/s:每秒磁盘I/O读请求数(IOPS指标)

  • w/s:每秒磁盘I/O写请求数(IOPS指标)

  • rMB/s:每秒磁盘I/O读取的数据量(实际吞吐量、带宽指标)。

  • wMB/s:每秒磁盘I/O写入的数据量(实际吞吐量、带宽指标)。

  • avgrq - sz:平均每次磁盘I/O请求的扇区数,反映了I/O 请求的大小。

  • avgqu - sz:平均磁盘I/O 队列长度(饱和度指标),显示了等待处理的I/O请求。的平均队列数量。如果该值持续走高,说明磁盘I/O存在性能瓶颈。

  • await:平均每次磁盘I/O请求的等待时间(响应指标),包括在队列中的等待时间和实际I/O 操作的时间,单位是毫秒。

  • svctm:平均每次磁盘I/O操作的服务时间(响应指标),也就是实际执行I/O操作所花费的时间,单位是毫秒。

  • %util:设备的I/O使用率(使用率指标),表示设备处于忙碌状态的时间百分比。如果该值接近100%,说明设备已经接近饱和,可能会影响系统性能。

核心要点:如果await和svctm的差值不大, 说明磁盘I/O几乎没有等待时间;如果await远大于svctm,说明磁盘I/O队列太长,磁盘I/O响应太慢,这种情况就需要优化磁盘了。

2.vmstat

主要是系统整体资源监控,可查看系统级的CPU、内存、I/O,判断系统负载类型、内存交换swap等问题。vmstat属于系统自带的procps工具包。

   用法实例:vmstat 2 5 (每两秒输出一次结果,输出5次)

字段参数说明:

(1)procs(进程)

  • r:等待运行的就绪队列进程数(CPU瓶颈指标)。如果r值大于本机核心数,并且不断提升,说明CPU瓶颈问题。

  • b:处于阻塞状态,等待I/O的进程数(磁盘瓶颈指标)。如果b值大于0,说明磁盘I/O慢,导致进程卡在等磁盘响应。

(2)memory内存(单位KB)

  • swpd:已使用swap 交换分区的总量;如果swpd持续上涨并且si 频繁非0 ,说明物理内存不足

  • free:物理内存剩余量。Linux的机制是会尽量用完物理内存做缓存,因此多数情况下free 值低是正常的现象。

  • buff:块设备缓冲区(磁盘元数据缓存)

  • cache:页缓存(文件读写缓存)

(3)swap交换IO(核心判断内存是否不足)

  • si:swap in,每秒从交换区读入内存的数据

  • so:swap out,每秒写入交换区的数据

如果si/so这两个值长期不为0,说明物理内存压力大,系统频繁换页,会造成系统性能严重下降。

(4)io 磁盘IO(单位块,1 块=512字节)

  • bi:block in,每秒从磁盘读入块数

  • bo:block out,每秒写入磁盘块数

(5)system系统中断及上下文切换

  • in:interrupt,每秒硬件中断次数(网卡、磁盘中断)

  • cs:context switch,每秒进程上下文切换次数

如果cs突增,说明多线程频繁切换以及锁竞争激烈

(6)cpu整机CPU 占用(总和100%)

  • us:user 用户态CPU占比

  • sy:system 内核态CPU占比

  • id:空闲CPU占比

  • wa:iowait等待磁盘IO的CPU时间(关键I/O瓶颈指标)

如果wa持续大于10%并且b大于0、bi/bo持续高,说明磁盘I/O出现瓶颈问题。

  • st:steal被虚拟化宿主机抢占的CPU(虚拟机场景)

核心要点:

  • 如果r值持续大于本机CPU核心数并且us+sy持续高,而id值很低,但wa值很低,说明CPU存在瓶颈。

  • 如果wa值很高并且b值大于0,同时bi/bo大、r值不大,id值低,说明存在I/O瓶颈。

  • 如果si/so值频繁不为0,swpd值不断提高,free值持续走低,说明内存不足。

  • 如果cs值巨大并且sy值不断升高,说明多线程上下文切换过高。

三、五个指标综合运用的参考

  1. 1. 高使用率+高IOPS +低延迟,属于正常的业务运行负载。
  2. 2. 高使用率+高吞吐量+低IOPS,属于正常顺序读写负载。
  3. 3. 高使用率+高饱和度+高延迟,属于磁盘性能不足,存在IO瓶颈。
  4. 4.使用率不高+高延迟,属于磁盘硬件异常或者故障。
  5. 5. 延迟高+高饱和度,属于磁盘I/O资源不足。
  6. 6. 延迟高但饱和度低,也可能磁盘硬件异常或者故障。

四、写在最后

     磁盘监控的主要五个指标(I/O使用率、饱和度、IOPS、吞吐量、响应时间)是评估linux系统的磁盘存储运行状态的多维度因素,同时结合这五个指标通过常用的磁盘监控工具iostat、vmstat对磁盘运行状态采样结果,为我们做好计算机存储系统正常、高效运行提供基础铺垫。

      iostat和vmstat这两个工具是很常用的监控磁盘设备、磁盘性能、分析存储瓶颈的工具,这两个工具已经能解决大部分场景。而监控磁盘的监控工具还有很多,比如atop可以分磁盘和分进程精细化统计、iotop可以精准定位哪个进程产生大量I/O等等,可以结合实际场景进行综合选择和运用。

最新文章

随机文章