Linux 状态命令之磁盘状态 iostat

简介

Linux 系统中的 iostat 是 I/O statistics(输入/输出统计)的缩写,iostat 工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU 使用情况。

vmstat 一样,iostat 也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

安装

1
yum install sysstat

语法

1
2
3
4
5
6
7
8
9
10
11
iostat [参数] [时间] [次数]

-c 显示CPU使用情况
-d 显示磁盘使用情况
-k 以K为单位显示
-m 以M为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS使用情况
-p 可以报告出每块磁盘的每个分区的使用情况
-t 显示终端和CPU的信息
-x 显示详细信息

示例

1
2
3
4
5
6
7
8
9
10
11
12
[fenglepeng@centos]# iostat 
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 12/20/2022 _x86_64_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.54 0.01 0.38 0.00 0.00 99.08

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
fd0 0.00 0.00 0.00 21280 0
sdb 0.02 0.00 0.11 2790 1811861
sda 0.27 0.62 3.83 10461853 64221227
dm-0 0.31 0.60 3.82 9995019 64162414
dm-1 0.00 0.00 0.00 2204 0

其中:

  • avg-cpu

    • %user:CPU 处在用户模式下的时间百分比。
    • %nice:CPU 处在带 NICE 值的用户模式下的时间百分比。
    • %system:CPU 处在系统模式下的时间百分比。
    • %iowait:CPU 等待输入输出完成时间的百分比。
    • %steal:管理程序维护另一个虚拟处理器时,虚拟 CPU 的无意识等待时间百分比。
    • %idle:CPU 空闲时间百分比。
  • Device:设备名称。当然了,iostat 命令的重点不是用来看 CPU 的,重点是用来监测磁盘性能的。

    • tps:每秒 I/O 数(即 IOPS。磁盘连续读和连续写之和)。
    • kB_read/s:每秒从磁盘读取数据大小,单位 KB/s。
    • kB_wrtn/s:每秒写入磁盘的数据的大小,单位 KB/s。
    • kB_read:从磁盘读出的数据总数,单位 KB。
    • kB_wrtn:写入磁盘的的数据总数,单位 KB。
1
2
3
4
5
6
7
8
9
10
11
12
[fenglepeng@centos]# iostat -x
Linux 3.10.0-1160.11.1.el7.x86_64 (template-centos7) 12/20/2022 _x86_64_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.54 0.01 0.38 0.00 0.00 99.08

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
fd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 22.25 22.25 0.00 22.25 0.00
sdb 0.00 0.00 0.00 0.02 0.00 0.11 12.58 0.00 1.71 1.69 1.71 1.24 0.00
sda 0.00 0.05 0.00 0.26 0.62 3.83 33.26 0.00 7.26 7.39 7.25 0.52 0.01
dm-0 0.00 0.00 0.00 0.31 0.60 3.82 28.24 0.00 11.18 7.49 11.22 0.45 0.01
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 50.09 0.00 0.07 0.07 0.00 0.07 0.00

其中:

  • rrqm/s:每秒合并到设备的读取请求数。
  • wrqm/s:每秒合并到设备的写请求数。
  • r/s:每秒向磁盘发起的读操作数。
  • w/s:每秒向磁盘发起的写操作数。
  • rkB/s:每秒读 K 字节数。
  • wkB/s:每秒写 K 字节数。
  • avgrq-sz:平均每次设备 I/O 操作的数据大小。
  • avgqu-sz:平均 I/O 队列长度。
  • await:平均每次设备 I/O 操作的等待时间 (毫秒),一般地,系统 I/O 响应时间应该低于 5ms,如果大于 10ms 就比较大了。
  • r_await:每个读操作平均所需的时间;不仅包括硬盘设备读操作的时间,还包括了在 kernel 队列中等待的时间。
  • w_await:每个写操作平均所需的时间;不仅包括硬盘设备写操作的时间,还包括了在 kernel 队列中等待的时间。
  • svctm:平均每次设备 I/O 操作的服务时间 (毫秒)(这个数据不可信!)。
  • %util:一秒中有百分之多少的时间用于 I/O 操作,即被 IO 消耗的 CPU 百分比,一般地,如果该参数是 100% 表示设备已经接近满负荷运行了。

性能监控指标

我们到底该关注哪些输出内容就可以确定这台服务器是否存在 IO 性能瓶颈。

  • %iowait:如果该值较高,表示磁盘存在 I/O 瓶颈。
  • await:一般地,系统 I/O 响应时间应该低于 5ms,如果大于 10ms 就比较大了。
  • avgqu-sz:如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过 2,一般认为该磁盘存在 I/O 性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的I/O等待队列长度。
  • %util:一般地,如果该参数是 100% 表示设备已经接近满负荷运行了。

最后,除了关注指标外,我们更需要结合部署的业务进行分析。对于磁盘随机读写频繁的业务,比如图片存取、数据库、邮件服务器等,此类业务吗,TPS 才是关键点。对于顺序读写频繁的业务,需要传输大块数据的,如视频点播、文件同步,关注的是磁盘的吞吐量。


Linux 状态命令之磁盘状态 iostat
https://flepeng.github.io/002-Linux-21-命令-Linux-状态命令之磁盘状态-iostat/
作者
Lepeng
发布于
2021年7月5日
许可协议