抖音优化

douyinyouhua

查看linux服务器io应该看什么意思,linux服务器io占用高怎么排查

2026-09-16 13:14:54

查看Linux服务器IO,核心不是看“磁盘用了多少”,而是看iostat输出中的%util、await、avgqu-sz三项,再配合top里的iowait,判断磁盘到底是忙碌得正常,还是已经慢到拖累业务。

很多运维看到%util冲到100%就急着扩容,其实单看这一个数字很容易误判。%util高只能说明磁盘在采样周期内没闲着,不代表它已经处理不过来,真正决定磁盘该不该换、该不该加的是等待时间和排队深度。

linux服务器io性能怎么看:别只盯着一个数字

先跑一条最常用的命令:

iostat -x 1 3

1表示每1秒采一次,3表示总共采3次,第一次输出的数据是从开机到现在的累计平均值,参考价值低,直接跳过,重点看后面两组实时采样。

这条命令会把磁盘每一项IO指标摊开,如果不加-x,只有最基本的tps、kB_read/s、kB_wrtn/s,看不到等待时间和排队情况,所以判断性能问题,一定用-x模式。

iostat查看磁盘io各项指标含义逐项拆解

先把输出里的列名逐一说清楚,以一块普通数据盘为例,关键列有这些:

指标 通俗解释
r/s、w/s 每秒实际完成的读、写请求数,二者相加就是磁盘当前IOPS
rkB/s、wkB/s 每秒读、写的数据量,单位KB,相加就是吞吐量
avgrq-sz 平均一次IO请求携带的数据量,单位扇区,可用于判断顺序还是随机
avgqu-sz 平均排队中的请求数,相当于收银台前排了几个人
await 一次IO从发出到完成的总等待时间,包含排队时间和服务时间
r_await、w_await 读、写请求各自的await,分开看更容易定位问题
svctm 老版本里的服务时间,新版已不再精确,基本可以忽略
%util 带宽占用率,接近100%说明设备一直在干活,但不代表干得慢

查看linux服务器io应该看什么意思,linux服务器io占用高怎么排查

await是所有指标里最需要先看的,它直接回答“一次请求要多长时间才能完成”,如果await很低,哪怕%util接近100%,说明磁盘在高效吞吐;如果await很高,哪怕%util只有30%,用户也能明显感觉到慢。

avgqu-sz也很关键,它反映磁盘请求的积压程度,持续大于1,说明平均有一个以上的请求在排队等处理,这个值越高,说明磁盘越来不及消化。

国内云服务器磁盘io性能怎么看,和物理机有什么差别

国内云服务器用的是虚拟化云盘,它的IO性能不是纯硬件决定,还受云盘规格和配额限制,很多时候物理机上看到的iostat很正常,但业务还是卡,问题可能出在云盘限流。

所以国内云服务器磁盘io性能怎么看,不能只看系统里的iostat,还要打开云服务商控制台,看磁盘监控里的IOPS和吞吐带宽,像简米云、酷番云、华为云的块存储,都明确标注了基准IOPS、最大IOPS和突发能力,系统里iostat -x看到的r/s+w/s只是实际到达虚机的请求数,不代表云盘后端真实处理能力。

举个例子:某台云主机iostat显示await瞬间从几毫秒飙到几百毫秒,而%util只有20%左右,这种情况多半是云盘配额到了上限,或者后端存储抖动,此时查控制台监控,往往能看到磁盘IOPS曲线已经贴着规格上限,这种情况下加应用线程、调内核参数都无效,只能升配云盘规格或换更高性能的云盘类型。

服务器io瓶颈怎么判断:把“忙”和“慢”分开看

判断磁盘是不是瓶颈,核心是把两个维度拆开:

  • 忙:设备一直在干活,用%util表示。
  • 慢:每个请求要等很久,用await表示。

忙但快,是好事;忙而且慢,才是真瓶颈,慢但不忙,多半是单次请求太大,或后端的网络存储拖后腿。

具体可按下面四步判断。

  1. 先看avgqu-sz,持续大于1,说明有请求在排队,大于3就说明积压已经比较明显。
  2. 再看await,机械盘await稳定超过20ms、SSD超过10ms,通常意味着响应变差,行业共识认为,机械盘随机读写的响应时间天然比SSD高一个数量级,所以阈值不能一刀切。
  3. 查看linux服务器io应该看什么意思,linux服务器io占用高怎么排查

  4. 结合%util,util长期在90%以上,同时await持续上升,那磁盘基本已经跑满,扩容或换盘是绕不开的,util不高但await很高,就要查是不是单次请求太大、随机IO太多,或者云盘/NFS有网络延迟。
  5. 最后看iowait,top命令里的%wa表示CPU在等待IO完成的时间占比,多核服务器整体iowait长期超过30%就要重视,但注意,iowait高不一定说明磁盘慢,后面Q&A会展开。

可以用下面这张表快速判断常见场景:

场景 %util await avgqu-sz
顺序大文件备份 接近100% 几毫秒 接近0 磁盘忙但健康
数据库随机小IO 40%左右 30ms以上 2以上 磁盘响应慢,已成瓶颈
云盘偶发限流 不高 瞬间几百ms 瞬时飙高 云盘配额或后端抖动

linux服务器磁盘io高怎么排查:四步定位到进程和文件

假设业务突然变慢,top里%wa很高,怎么快速找到谁在疯狂读写?

第一步:锁定进程

用iotop直接看进程级别的读写速率:

iotop -o

-o参数只显示正在产生IO的进程,如果没有iotop,先用yum install iotop或apt install iotop安装。

也可以用pidstat采样:

pidstat -d 1

输出里kB_rd/s和kB_wr/s最大的进程,就是主要嫌疑对象。

第二步:找它打开的文件

拿到进程PID后,用lsof看它打开了哪些文件:

lsof -p 12345 | grep -E 'REG|DIR'

如果怀疑整个目录被刷,直接:

lsof +D /data

这样能快速看到进程在读写哪些日志、库文件或数据文件,很多时候高IO的源头是日志没做轮转、数据库在做全表扫描,或者备份脚本在白天误跑。

查看linux服务器io应该看什么意思,linux服务器io占用高怎么排查

第三步:定位具体磁盘分区

系统里挂了好几块盘时,要确认是系统盘忙还是数据盘忙:

iostat -px 1

加-p会列出每个分区,比如sda1、sdb1,业务高峰时,如果系统盘%util接近100%而数据盘很闲,大概率是日志或系统swap在捣乱,如果是数据盘高,再结合前面的进程和文件定位。

第四步:对比时间线

如果磁盘IO高是周期性出现,不是持续性,用sar记录一小段:

sar -d -p 1 10

10秒的采样能看出IO峰值是否和定时任务、日志切割、备份脚本的时间点吻合,很多服务器IO问题不是硬件不够,而是几个重量级任务撞在一起。

查看linux服务器io,先看等待再看占用

真正需要记住的只有一句话:先看await和avgqu-sz判断慢不慢,再看%util和iowait判断忙不忙。 两个维度都高,磁盘就是实打实的瓶颈;只有一个高,就要分开处理,别急着换硬件。

关于查看linux服务器io的常见问题

linux服务器io性能怎么看最简单?

最简单的组合是iostat -x 1加top,第一眼先看iostat输出里的await,机械盘超过20ms、SSD超过10ms,再看%util是否接近100%,top里%wa超过30%说明CPU已经在等IO。

iowait高说明什么问题,一定是磁盘慢吗?

iowait高说明CPU有任务在等待IO完成,但它高不一定代表磁盘慢,可能是应用发起了大量随机小IO,可能是NFS或云盘网络延迟,也可能只是CPU核数少导致等待占比被放大,需要结合iostat的r/s、w/s和await一起看,才能确定是不是磁盘本身的问题。

服务器io瓶颈怎么判断有没有到硬件上限?

先查磁盘规格:机械盘随机IOPS通常在几百量级,SATA SSD随机读几万,NVMe SSD随机读可达几十万,再拿iostat里的r/s加w/s做对比,如果实际IOPS已接近规格值,同时await持续上升、avgqu-sz持续大于1,说明基本到了硬件上限,云服务器还要对照控制台给出的基准IOPS和吞吐配额,很多时候限流发生之前,iostat是看不到硬件饱和迹象的。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待