• 命令 iostatsarmpstat 同属 sysstat 软件包下的子命令;
  • 在实际工作中,很少用该命令去查看系统性能和负载,基本上可以使用 sar 命令搞定;
  • 关于命令 sar 的用法可以参考:Linux 命令之 - sar
  • 关于命令 mpstat 的用法可以参考:Linux 命令之 - mpstat

命令介绍

iostat命令是sysstat工具包中的一个命令,用于收集和报告系统的I/O(输入/输出)统计信息。它可以帮助系统管理员监视系统的磁盘和文件系统的活动情况,从而识别潜在的性能问题或瓶颈。

通过iostat命令,用户可以收集并查看有关系统磁盘、块设备和文件系统的各种I/O统计数据,包括读取速率、写入速率、I/O请求次数等。这些统计数据有助于用户了解系统的负载情况、磁盘使用情况和性能瓶颈。

iostat命令通常与其他sysstat工具(如pmstat)一起使用,以提供对系统性能和资源利用情况的全面监视。

命令格式

iostat 命令

iostat 命令用于监控系统输入/输出设备负载情况。

1
iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]

其中:

  • 选项:用于指定 iostat 命令的参数和选项。
  • <时间间隔>:指定统计数据的时间间隔,即 iostat 命令每次收集统计数据的时间间隔。单位为秒。
  • <次数>:指定 iostat 命令收集统计数据的次数。

参数说明

参数 描述 备注
-c 显示 CPU 使用率 -
-d 显示磁盘使用情况 -
-h 以易读格式显示输出 -
-k 以 KB/s 为单位显示输出 -
-m 以 MB/s 为单位显示输出 -
-N 显示网络接口名称 -
-s 显示启动时间和活动时间 -
-t 显示时间戳 -
-V 显示版本信息 -
-x 显示详细磁盘活动 -
-y 显示 TTY 设备活动 -
-z 显示增长的页码活动 -
-f <目录> 为文件系统设置基准目录 -
+f <目录> 添加额外的基准目录 -
-j {ID|LABEL|PATH|UUID|…} 指定 JSON 格式输出的字段 -
–compact 使用紧凑格式输出 -
–dec={0|1|2} 设置十进制数字的显示格式 -
–human 以易读格式显示输出 -
–pretty 以易读格式显示输出 -
-o JSON 输出格式为 JSON -
-H -g <用户组名> 显示指定用户组的活动情况 -
-p [<设备> [,…] | ALL] 显示指定设备的活动情况 -
<设备> […] | ALL 指定要显示的设备列表 -

命令实例

基本用法

1.显示所有设备的 I/O 统计信息

1
2
3
4
5
6
7
8
9
10
11
# 显示所有设备的 I/O 统计信息,每隔 1 秒更新一次,持续 2 次,并且以易读方式显示单位(单位可选项有 -k, -m)
leazhi@leazhi-ubuntu2310:~/Templates$ iostat 1 2 -h
Linux 6.5.0-25-generic (leazhi-ubuntu2310) 03/13/2024 _x86_64_ (32 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
13.7% 0.0% 7.3% 0.0% 0.0% 79.0%

tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd Device
0.00 0.0k 0.0k 0.0k 13.0k 0.0k 0.0k loop0
0.00 0.0k 0.0k 0.0k 24.0k 0.0k 0.0k loop1
0.00 0.0k 0.0k 0.0k 15.0k 0.0k 0.0k loop10

2.显示 CPU 使用率:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 默认不加时间和次数只显示一次
leazhi@leazhi-ubuntu2310:~/Templates$ iostat -c
Linux 6.5.0-25-generic (leazhi-ubuntu2310) 03/13/2024 _x86_64_ (32 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
13.59 0.00 7.23 0.05 0.00 79.14

Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd

# 每隔 1 秒更新一次,持续 2 次
leazhi@leazhi-ubuntu2310:~/Templates$ iostat -c 1 2
Linux 6.5.0-25-generic (leazhi-ubuntu2310) 03/13/2024 _x86_64_ (32 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
13.58 0.00 7.22 0.05 0.00 79.14

Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd


avg-cpu: %user %nice %system %iowait %steal %idle
3.20 0.00 1.04 0.03 0.00 95.73

Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd

3.显示指定设备的 I/O 统计信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

leazhi@leazhi-ubuntu2310:~/Templates$ iostat -p nvme0n1
Linux 6.5.0-25-generic (leazhi-ubuntu2310) 03/13/2024 _x86_64_ (32 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
13.53 0.00 7.17 0.05 0.00 79.25

Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
nvme0n1 6.63 35.55 98.66 0.00 5056045 14033057 0
nvme0n1p1 0.00 0.04 0.01 0.00 5413 824 0
nvme0n1p2 0.00 0.06 0.00 0.00 8905 1 0
nvme0n1p3 0.82 17.99 16.84 0.00 2559049 2395076 0
nvme0n1p4 0.00 0.02 0.00 0.00 3380 0 0
nvme0n1p5 5.55 8.81 74.82 0.00 1253129 10641664 0
nvme0n1p6 0.26 8.60 7.00 0.00 1223697 995492 0

4.显示 I/O 统计信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
leazhi@leazhi-ubuntu2310:~/Templates$ iostat -N
Linux 6.5.0-25-generic (leazhi-ubuntu2310) 03/13/2024 _x86_64_ (32 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
13.55 0.00 7.19 0.05 0.00 79.20

Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
loop0 0.00 0.00 0.00 0.00 13 0 0
loop1 0.00 0.00 0.00 0.00 24 0 0
loop10 0.00 0.00 0.00 0.00 15 0 0
loop11 0.00 0.00 0.00 0.00 39 0 0
loop12 0.00 0.00 0.00 0.00 12 0 0
loop13 0.00 0.00 0.00 0.00 51 0 0
loop14 0.00 0.00 0.00 0.00 16 0 0
loop15 0.00 0.00 0.00 0.00 51 0 0
loop16 0.00 0.00 0.00 0.00 11 0 0
loop17 0.00 0.00 0.00 0.00 28 0 0
loop18 0.00 0.00 0.00 0.00 11 0 0
loop19 0.00 0.15 0.00 0.00 20864 0 0
loop2 0.00 0.00 0.00 0.00 14 0 0
loop20 0.00 0.00 0.00 0.00 270 0 0
loop21 0.00 0.00 0.00 0.00 108 0 0
loop22 0.00 0.00 0.00 0.00 10 0 0
loop3 0.00 0.04 0.00 0.00 5774 0 0
loop4 0.00 0.00 0.00 0.00 11 0 0
loop5 0.01 0.55 0.00 0.00 78377 0 0
loop6 0.00 0.00 0.00 0.00 11 0 0
loop7 0.00 0.01 0.00 0.00 1570 0 0
loop8 0.02 0.22 0.00 0.00 30896 0 0
loop9 0.04 0.10 0.00 0.00 14329 0 0
nvme0n1 6.62 35.56 98.58 0.00 5056045 14015761 0
nvme1n1 0.00 0.02 0.00 0.00 3320 0 0
nvme2n1 0.00 0.02 0.00 0.00 3348 0 0
sda 0.36 1.70 0.01 0.00 241590 1364 0

扩展用法

1.结合 grep 命令过滤结果

1
2
3
4
5
6
 过滤只显示 CPU 使用率超过 50% 的设备
iostat | grep -E "avg-cpu.+50.0"

# 输出示例
avg-cpu: %user %nice %system %iowait %steal %idle
51.23 0.00 0.00 0.00 0.00 48.77

2.使用 iostat 命令监控系统 I/O 活动

1
2
3
4
5
6
7
8
9
# 监控系统 I/O 活动,每隔 1 秒更新一次
while true; do iostat 1; sleep 1; done

# 输出示例
...
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.00 0.00 0.00 0.00 0.00
vda1 0.00 0.00 0.00 0.00 0.00
...

高级用法

1.使用 iostat 命令分析 I/O 瓶颈

1
2
3
4
5
6
7
8
# 分析导致系统性能瓶颈的 I/O 设备
iostat -x 1 10 | grep -E "await|svctm" | sort -k 6nr

# 输出示例
Device: await svctm
sdb 10.00 20.00
sda 5.00 10.00
...