1. 写在前面

本文主要介绍 Linux iostat(I/O statistics) 命令:用于监控系统的磁盘I/O活动情况,包括:磁盘读写速率、I/O等待时间、CPU使用率等信息。

iostat 区别于 iotop: iostat 是系统级别的IO监控;iotop 是进程级别IO监控;

关注 公众号 获取最新博文: 滑翔的纸飞机

2. iostat 命令

2.1 安装

  • RedHat / CentOS / Fedora 
yum install sysstat
  • Debian / Ubuntu / Linux Mint 
apt-get install sysstat

2.2 iostat 命令使用

基本示例:

直接使用iostat命令,查看系统的整体情况,显示CPU的负载情况和磁盘的状态信息。

root@dev:~# iostat
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/13/23 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.03    0.02    0.73    0.11    0.01   95.11

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        610          0          0
loop1             0.01         0.02         0.00         0.00       2140          0          0
vda               3.80        16.41        77.58         0.00    2004135    9474635          0

帮助信息:

root@dev:~# iostat --help
-----------------------------------------------------------------------------------
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ --dec={ 0 | 1 | 2 } ] [ --human ] [ -o JSON ]
[ [ -H ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
[ <device> [...] | ALL ]

参数说明:

-c: 仅显示CPU利用率相关信息;
-d: 仅显示磁盘I/O相关信息;
-k: 显示输出的数据单位为KB/s而不是默认的字节/s;
-t: 在输出中显示时间戳(时间戳格式YYYY-MM-DD HH:MM:SS)。
-m:显示状态以兆字节每秒为单位;
-p:仅显示块设备和所有被使用的其他分区的状态;
-V:显示版号并退出;
-x:显示扩展状态;
-N:显示 lvm2 统计信息;
-j:显示持久设备名称统计信息;

interval(间隔时间):每次报告的间隔时间(秒);
count(次数):显示报告的次数;

输出说明:

root@dev:~# iostat
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/13/23 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.03    0.02    0.73    0.11    0.01   95.11

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        610          0          0
vda               3.80        16.41        77.58         0.00    2004135    9474635          0

分块介绍上述输出:

  • 第一部分:Linux 5.4.0-167-generic (dev) 12/13/23 _x86_64_ (4 CPU)
•	Linux 5.4.0-167-generic :内核版本号;
•	dev:主机名字;
•	12/13/23:日期;
•	_x86_64_:CPU架构;
•	4 CPU:当前系统的CPU的数量;
  • 第二部分: CPU 信息(类似top命令)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.03    0.02    0.73    0.11    0.01   95.11
•	%user : 表示用户空间程序执行的CPU时间百分比;
•	%nice : 表示以较高的优先级运行的用户进程的CPU时间百分比;
•	%system : 表示内核空间程序执行的CPU时间百分比;
•	%iowait : 表示CPU等待I/O操作完成的时间百分比;
•	%steal : 表示由于运行虚拟机等原因被其他虚拟机占用的CPU时间百分比;
•	%idle : 表示CPU空闲时间的百分比;
					
  • 第三部分: 设备利用率
•	Device : /dev目录中列出的设备/分区名称;
•	tps : 每秒向设备发出的传输次数。tps 越高,表示处理器越忙; 
•	Blk_read/s : 显示每秒从设备读取的数据量,以块数(千字节、兆字节)表示;
•	Blk_wrtn/s : 写入设备的数据量,以每秒块数(千字节、兆字节)表示;
•	Blk_read : 显示读取的数据块总数;
•	Blk_wrtn : 显示写入的区块总数;

iostat 使用以下系统文件作为信息输出依据:

•	/proc/stat :包含系统统计信息;
•	/proc/uptime :包含系统正常运行时间;
•	/proc/diskstats 包含磁盘统计信息;
•	/sys 包含块设备的统计数据;
•	/proc/self/mountstats 包含网络文件系统的统计数据;
•	/dev/disk 包含持久设备名称;

2.2.1 命令示例

(1). 使用 -x 输出磁盘I/O的详细情况

显示所有设备的详细的 I/O 统计信息

root@dev:~# iostat -x
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.65    0.01    0.69    0.08    0.01   95.56

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
loop0            0.00      0.00     0.00   0.00    8.49    11.51    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
loop1            0.01      0.01     0.00   0.00   18.89     1.35    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
vda              0.59     11.03     0.19  23.99    5.99    18.68    3.14     76.49     4.44  58.54    1.86    24.33    0.00      0.00     0.00   0.00    0.00     0.00    0.01   0.50
•	Device: 监测设备名称;
•	rrqm/s: 每秒需要读取需求的数量;
•	wrqm/s: 每秒需要写入需求的数量;
•	r/s: 每秒实际读取需求的数量;
•	w/s: 每秒实际写入需求的数量;
•	rsec/s: 每秒读取区段的数量;
•	wsec/s: 每秒写入区段的数量;
•	rkB/s: 每秒实际读取的大小,单位为KB;
•	wkB/s: 每秒实际写入的大小,单位为KB;
•	avgrq-sz: 需求的平均大小区段;
•	avgqu-sz: 需求的平均队列长度;
•	await: 等待I/O平均的时间(milliseconds);
•	svctm: I/O需求完成的平均时间;
•	%util: 被I/O需求消耗的CPU百分比;

查看某块磁盘I/O的详细情况

root@dev:~# iostat -x  /vda
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.66    0.01    0.69    0.08    0.01   95.56

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

统计信息、详细信息并排显示

root@dev:~# iostat -xd
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_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
loop0            0.00      0.00     0.00   0.00    8.49    11.51    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
loop1            0.01      0.01     0.00   0.00   18.89     1.35    0.00      
vda              0.59     10.97     0.19  23.96    5.98    18.65    3.14     76.44     4.44  58.56    1.85    24.34    0.00      0.00     0.00   0.00    0.00     0.00    0.01   0.50
(2). 查看 cpu 状态信息

显示 CPU 统计信息: 使用 -c 选项可以显示 CPU 的统计信息。

root@dev:~# iostat -c
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.66    0.01    0.69    0.08    0.02   95.55

间隔 5s 输出 3 次:

root@dev:~# iostat -c 5 3
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.66    0.01    0.69    0.08    0.02   95.55



avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.12    0.00    0.50    0.00    0.00   95.37



avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.06    0.00    0.80    0.00    0.05   95.09
(3). 只查看磁盘状态

只查看磁盘的状态信息: 展示磁盘的读写速率、I/O 等待时间、CPU 使用率等信息。

root@dev:~# iostat -d
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_x86_64_	(4 CPU)

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        610          0          0
loop1             0.01         0.01         0.00         0.00       2140          0          0
vda               3.73        10.98        76.46         0.00    2313111   16105867          0

实时监控: 每隔 3s 就显示磁盘信息。

root@dev:~# iostat -d 3
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_x86_64_	(4 CPU)

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        610          0          0
loop1             0.01         0.01         0.00         0.00       2140          0          0
vda               3.73        10.98        76.44         0.00    2313155   16109667          0


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          0          0          0
loop1             0.00         0.00         0.00         0.00          0          0          0
vda               1.00         0.00         8.00         0.00          0         24          0
(4). 以k或M为单位显示信息

以k或M为单位显示信息:iostat -k / iostat -m

root@dev:~# iostat -k
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.66    0.01    0.69    0.08    0.02   95.55

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        610          0          0
loop1             0.01         0.01         0.00         0.00       2140          0          0
vda               3.73        10.96        76.44         0.00    2313523   16141879          0
(5) 显示块设备的统计信息

显示系统正在使用的块设备及其所有分区的统计数据。如果在命令行中输入设备名称,则会显示该设备及其所有分区的统计数据。

root@dev:~# iostat -p
-----------------------------------------------------------------------------------
Linux 5.4.0-167-generic (dev) 	12/15/23 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.66    0.01    0.69    0.08    0.02   95.55

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        610          0          0
loop1             0.01         0.01         0.00         0.00       2140          0          0
vda               3.73        10.94        76.41         0.00    2313699   16156263          0
vda1              3.46        10.83        76.41         0.00    2289728   16156258          0
vda14             0.00         0.02         0.00         0.00       3893          0          0
vda15             0.01         0.07         0.00         0.00      13914          5          0

2.3 总结

磁盘分析

在使用 iostat 进行系统性能监控时,需要注意综合分析磁盘和 CPU 等多个性能指标,以全面评估系统性能瓶颈的位置和原因。

通过监控以上指标,可以识别磁盘的瓶颈位置,例如: • 如果 r/sw/s 较高,说明磁盘 IO 压力较大,需要考虑更换更高性能的硬盘; • 如果 awaitsvctm 较高,说明磁盘处理 I/O 请求的能力不足,可能需要更换磁盘控制器或升级磁盘阵列等。

CPU分析

通过监控以上指标,可以识别CPU的瓶颈位置,例如: • 如果 %user%system 较高,说明CPU的负载较大,可能需要考虑升级CPU或增加CPU核心数; • 如果 %iowait 较高,说明CPU等待IO完成的时间较长,可能需要优化磁盘性能或者减少磁盘IO操作; • 如果 %idle 值高,表示 CPU 较空闲,系统处于空闲状态,无太多处理任务; • 如果 %idle 值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。 • 如果 %idle 较低,说明 CPU 负载较大,可能需要考虑优化应用程序或增加 CPU 资源等。

感谢您花时间阅读文章!

关注公众号不迷路!