iostat 使用说明

iostat 说明

iostat 用于监控系统 ​CPU 使用率​ 和 ​磁盘 I/O 性能,是排查 I/O 瓶颈的关键工具。

iostat 参数说明

基本选项

参数 说明
-c 仅显示 ​CPU 使用率统计​(默认同时显示 CPU 和设备报告)。
-d 仅显示 ​设备(磁盘)I/O 统计​(默认显示 CPU + 设备)。
-h 人类可读格式​(自动使用 KB、MB、GB 等单位)。
-k 以 ​KB​ 为单位显示数据(默认块数,1 块=512B)。
-m 以 ​MB​ 为单位显示数据。
-N 显示 ​设备映射名称​(如 LVM 逻辑卷名 /dev/mapper/vg0-lv1)。
-s 显示 ​摘要报告​(合并设备统计,适合快速查看)。
-t 输出中增加 ​时间戳​(便于记录性能变化时间点)。
-V 显示 ​版本信息
-x 显示 ​扩展 I/O 统计​(包括 awaitsvctm%util 等关键指标)。
-y 跳过第一个统计结果(避免显示系统启动以来的累计数据)。
-z 隐藏 ​零活动设备​(过滤未使用的磁盘,简化输出)。
-j  可选参数:ID | LABEL | PATH | UUID 
--dec={0|1|2} 控制小数位数(0:整数,1:1 位小数,默认 2)。
--human 同 -h,人类可读格式。
-o JSON 输出为 ​JSON 格式​(便于自动化处理)。
-g <group_name> 将设备分组统计(需配合 -H 显示组标题)。
示例:iostat -g mygroup sda sdb
-H 显示设备分组的标题(配合 -g 使用)。
-p  可选参数:  <device> [,...] | ALL 

设备筛选

参数 说明
<device> 指定监控的 ​设备名​(如 sdanvme0n1),可多个并列。
ALL 监控 ​所有设备​(默认行为)。

监控频率参数

参数 说明
<interval> 统计间隔(秒),持续输出数据。
<count> 统计次数(若省略,则无限循环)。

iostat 关键指标说明

指标 说明
r/s 每秒读请求次数​:反映设备的读操作频率。高值可能表示频繁读取小文件。
rkB/s 每秒读取数据量(KB)​​:实际读取带宽。结合 r/s 可判断请求大小。
rrqm/s 每秒合并的读请求数​:内核将相邻请求合并后发送给磁盘,提升效率。
%rrqm 读请求合并百分比​:(rrqm/s) / (r/s + rrqm/s) * 100%。高值表示请求局部性好。
r_await 读请求平均等待时间(ms)​​:从请求发起到完成的总时间(包括队列等待 + 磁盘处理)。
rareq-sz 读请求平均大小(KB)​​:rkB/s / r/s。值越大,顺序读取特征越明显。
w/s 每秒写请求次数​:写操作频率。高值可能表示频繁写入日志或数据。
wkB/s 每秒写入数据量(KB)​​:实际写入带宽。
wrqm/s 每秒合并的写请求数​:类似读请求合并,优化写入效率。
%wrqm 写请求合并百分比​:(wrqm/s) / (w/s + wrqm/s) * 100%
w_await 写请求平均等待时间(ms)​​:从请求发起到完成的总时间。
wareq-sz 写请求平均大小(KB)​​:wkB/s / w/s
d/s 每秒丢弃请求次数​(SSD TRIM 操作)。
dkB/s 每秒丢弃数据量(KB)​​:释放的块数量。
drqm/s 每秒合并的丢弃请求数
%drqm 丢弃请求合并百分比
d_await 丢弃请求平均等待时间(ms)​
dareq-sz 丢弃请求平均大小(KB)​
aqu-sz 平均 I/O 队列长度​:正在处理和排队的请求总数。值 > 1 表示存在排队。
%util 设备带宽利用率​:(处理 I/O 的时间) / 总时间 * 100%。达到 100% 表示饱和。

常用场景示例

实时监控磁盘 I/O 性能(关键指标)

iostat -dx 1 1  # 每 1 秒刷新,共 1 次,显示扩展统计
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	05/07/2025 	_x86_64_	(4 CPU)

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz  aqu-sz  %util
dm-0             2.90     74.77     0.00   0.00    0.68    25.77    1.61     22.58     0.00   0.00    0.76    14.01    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.09
dm-1             0.02      0.44     0.00   0.00    0.20    22.85    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.00
nvme0n1          2.97     76.88     0.00   0.00    0.61    25.86    0.55     22.59     1.06  65.76    0.67    40.88    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.09

监控 CPU 和设备 I/O

iostat -c -d -t -h 2  # 每 2 秒刷新,显示 CPU、设备、时间戳和可读单位
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	05/07/2025 	_x86_64_	(4 CPU)

05/07/2025 03:25:56 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.0%    0.0%    0.2%    0.0%    0.0%   99.8%

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
     3.88        64.0k        19.4k         0.0k     365.4M     110.8M       0.0k dm-0
     0.02         0.4k         0.0k         0.0k       2.2M       0.0k       0.0k dm-1
     3.03        65.8k        19.4k         0.0k     375.8M     110.8M       0.0k nvme0n1
指标 说明 正常范围 异常处理
%user 用户态 CPU 时间​:执行应用程序代码的时间(如 Java、Python 进程)。 < 70% 优化代码逻辑、减少计算密集型操作。
%nice 调整优先级的用户态 CPU 时间​:优先级降低(nice 值 >0)的进程消耗的时间。 < 5% 检查低优先级进程(如备份任务)是否影响关键业务。
%system 内核态 CPU 时间​:执行系统调用和内核任务的时间(如中断处理、进程调度)。 < 30% 高频系统调用可能因配置不当(如小文件频繁 I/O)或驱动问题。
%idle CPU 空闲时间​:CPU 未执行任何任务的时间。 > 20% 高空闲率通常正常,但结合 %iowait 可判断是否存在 I/O 等待型瓶颈。
%iowait I/O 等待时间​:CPU 空闲且等待磁盘 I/O 完成的时间。 < 20% 高值需检查磁盘性能(iostat -dx)、RAID 状态或网络存储延迟。
%steal 虚拟化环境中的 CPU 抢占时间​:被 Hypervisor 分配给其他虚拟机的时间。 < 10% 高值需扩容虚拟机 vCPU 或优化宿主资源分配。
指标 说明 分析场景
tps 每秒传输次数​(Transfers Per Second):每秒完成的 I/O 操作次数(读 + 写 + 丢弃)。 高 tps 表示频繁的小 I/O 请求(如数据库事务),需结合 %util 判断是否过载。
kB_read/s 每秒读取数据量(KB)​​:从设备读取的数据速率。 高值可能因频繁读取大文件或缓存未命中,需优化缓存策略或升级存储。
kB_wrtn/s 每秒写入数据量(KB)​​:向设备写入的数据速率。 高值可能因日志写入、数据持久化,需检查写入模式(顺序/随机)和磁盘类型。
kB_dscd/s 每秒丢弃数据量(KB)​​(SSD TRIM 操作):标记不再使用的块以便回收。 高值表示 SSD 正在优化性能,但频繁 TRIM 可能影响寿命(需平衡)。
kB_read 自系统启动以来读取的总数据量(KB)​ 监控长期读取负载,结合时间判断是否合理(如备份任务)。
kB_wrtn 自系统启动以来写入的总数据量(KB)​ 评估磁盘写入寿命(尤其 SSD),防止过度磨损。
kB_dscd 自系统启动以来丢弃的总数据量(KB)​ 跟踪 SSD 维护行为,判断 TRIM 策略是否有效。
Device 块设备名称​(如 /dev/sdanvme0n1),可能包含 LVM 逻辑卷或分区。  

生成 JSON 报告

iostat -o JSON -j UUID 1 1  # 输出 JSON 格式,按 UUID 标识设备
{"sysstat": {
	"hosts": [
		{
			"nodename": "localhost.localdomain",
			"sysname": "Linux",
			"release": "4.19.90-2102.2.0.0062.ctl2.x86_64",
			"machine": "x86_64",
			"number-of-cpus": 4,
			"date": "05/07/2025",
			"statistics": [
				{
					"avg-cpu":  {"user": 0.03, "nice": 0.01, "system": 0.17, "iowait": 0.01, "steal": 0.00, "idle": 99.78},
					"disk": [
						{"disk_device": "01d05e20-f584-4296-b9dc-14f245c7cb99", "tps": 3.62, "kB_read/s": 59.50, "kB_wrtn/s": 18.08, "kB_dscd/s": 0.00, "kB_read": 374205, "kB_wrtn": 113720, "kB_dscd": 0},
						{"disk_device": "fdbf2d58-e7be-4278-a90b-096fa02d5829", "tps": 0.02, "kB_read/s": 0.35, "kB_wrtn/s": 0.00, "kB_dscd/s": 0.00, "kB_read": 2216, "kB_wrtn": 0, "kB_dscd": 0},
						{"disk_device": "nvme0n1", "tps": 2.82, "kB_read/s": 61.18, "kB_wrtn/s": 18.09, "kB_dscd/s": 0.00, "kB_read": 384770, "kB_wrtn": 113764, "kB_dscd": 0}
					]
				}
			]
		}
	]
}}

分组统计多块磁盘

iostat -g mydisk -H sdb sdc  # 将 sdb 和 sdc 合并为 "mydisk" 组
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	05/07/2025 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.03    0.01    0.17    0.01    0.00   99.78

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
 mydisk           0.00         0.00         0.00         0.00          0          0          0

iostat 性能瓶颈诊断

CPU 瓶颈判断

用户态 CPU 高(%user 高)

现象:%user > 70%,%idle < 20%。
原因:应用程序计算密集型操作(如加密、压缩、算法处理)。

内核态 CPU 高(%system 高)

现象:%system > 30%,%iowait 低。
原因:
    高频系统调用(如小文件频繁 I/O)。
    网络中断处理(如高 PPS 网络流量)。

磁盘 I/O 瓶颈

磁盘带宽饱和(%util 高)

现象:%util >= 90%,rkB/s 或 wkB/s 接近磁盘理论带宽。
原因:
    顺序读写大文件(如视频流、备份操作)。
    磁盘带宽达到物理限制。
优化:
    升级更高带宽的磁盘(如 HDD → SSD → NVMe)。
    使用 RAID 0 或分布式存储横向扩展。

I/O 延迟高(await 高)

现象:await > 10 ms(机械盘)或 await > 2 ms(SSD)。
原因:
    随机 I/O 过多(如数据库索引未命中)。
    磁盘队列堆积(aqu-sz > 1)。
优化:
    优化应用 I/O 模式(如增大块大小、预读数据)。
    使用 SSD 替代机械盘。

I/O 请求合并率低(%rrqm/%wrqm 低)

现象:%rrqm < 50% 或 %wrqm < 50%,rareq-sz/wareq-sz 小。
原因:随机 I/O 请求分散,无法合并。
优化:
    调整文件系统块大小(如 mkfs.ext4 -b 4096)。
    使用缓存技术(如 vmtouch 缓存热点文件)。
posted @ 2025-05-12 08:48  小吉猫  阅读(161)  评论(0)    收藏  举报