iostat

参考:https://zhuanlan.zhihu.com/p/649946956

安装

#默认已安装
yum install sysstat -y

选项参数

iostat <options> <device name>
-c 显示CPU使用情况
-d 显示磁盘使用情况
--dec={ 0 | 1 | 2 } 指定要使用的小数位数,默认为 2
-g GROUP_NAME { DEVICE [...] | ALL  显示一组设备的统计信息
-H 此选项必须与选项 -g 一起使用,指示只显示组的全局统计信息,而不显示组中单个设备的统计信息
-h 以可读格式打印大小
-j { ID | LABEL | PATH | UUID | ... } [ DEVICE [...] | ALL ] 显示永久设备名。选项 ID、LABEL 等用于指定持久名称的类型
-k 以 KB 为单位显示
-m 以 MB 为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS 使用情况
-p [ { DEVICE [,...] | ALL } ] 显示磁盘和分区的情况
-t 打印时间戳。时间戳格式可能取决于 S_TIME_FORMAT 环境变量
-V 显示版本信息并退出
-x 显示详细信息(显示一些扩展列的数据)
-y 如果在给定的时间间隔内显示多个记录,则忽略自系统启动以来的第一个统计信息
-z 省略在采样期间没有活动的任何设备的输出

 

常用命令

iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB),每1s收集1次数据,共收集10次
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB),每2s收集1次数据
iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await)等详细数据, 每1s收集1次数据,总共收集10次 
iostat -c 1 10            #查看cpu状态,每1s收集1次数据,总共收集10次

 

输出内容解析

[root@localhost ~]# iostat 
Linux 3.10.0-957.27.2.el7.x86_64 (localhost)     11/22/2023     _x86_64_    (64 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.26    0.00    0.00    0.00    0.00   99.74

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              92.77        50.93      5838.33  805661841 92351602575
dm-0              0.00         0.00         0.00      11401        528
dm-1              0.01         0.01         0.02      80713     377904
dm-2              1.32         0.01        52.66     119313  832956992
dm-3             10.88       108.36       197.10 1713991108 3117706164

 

第一行:内核版本号,主机名,当前的日期,cpu的架构,当前系统的cpu核数

cpu部分(仅根据 %iowait 不能判断出IO存在瓶颈,需结合其他指标查看):

  • %user:CPU处在用户模式下的时间百分比
  • %nice:CPU处在带NICE值的用户模式下的时间百分比
  • %system:CPU处在系统模式下的时间百分比
  • %iowait:CPU等待输入输出完成时间的百分比
  • %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
  • %idle:CPU空闲时间百分比

第三部分:

  • Device:/dev 目录下的磁盘(或分区)名称。(本文中的dm-x是容器的分区,sda是宿主机的io)
  • tps:该设备每秒的传输次数。一次传输即一次 I/O 请求,多个逻辑请求可能会被合并为一次 I/O 请求。一次传输请求的大小是未知的
  • kB_read/s:每秒从磁盘读取数据大小,单位KB/s
  • kB_wrtn/s:每秒写入磁盘的数据的大小,单位KB/s
  • kB_dscd/s: 每秒磁盘的丢块数,单数KB/s
  • kB_read:从磁盘读出的数据总数,单位KB
  • kB_wrtn:写入磁盘的的数据总数,单位KB
  • kB_dscd: 磁盘总的丢块数量

需要注意的是,如果使用iostat -dk 2这样的命令,每2s收集一次数据,则kB_wrtn的含义是2s内写入磁盘的数据总数,而kB_read的含义是2s内从磁盘读出的数据总数,kB_dscd的含义则是2s内磁盘块的丢块数量。

如果没有时间间隔参数,例如iostat -dk,则kB_wrtn的含义是从开机以来的写入磁盘的数据总量,kB_read的含义是从开机以来的从磁盘读出的数据总数,kB_dscd的含义则是开机以来的磁盘块的丢块数量。

 

-x 扩展列

[root@localhost ~]# iostat -x
Linux 3.10.0-957.27.2.el7.x86_64 (localhost)     11/22/2023     _x86_64_    (64 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.26    0.00    0.00    0.00    0.00   99.74

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     7.12    1.66   91.11    50.93  5838.52   126.97     0.17    1.79    1.78    1.79   0.32   2.97
dm-0              0.00     0.00    0.00    0.00     0.00     0.00    13.07     0.00    2.33    0.02   31.95   0.58   0.00
dm-1              0.00     0.00    0.00    0.01     0.01     0.02    10.35     0.00   24.78    7.04   26.37  14.20   0.01
dm-2              0.00     0.00    0.00    1.32     0.01    52.66    79.95     0.03   25.61   10.31   25.61  12.42   1.64
dm-3              0.00     0.00    3.58    7.30   108.35   197.09    56.14     0.15   13.78    0.60   20.24   4.52   4.92
dm-4              0.00     0.00    0.00    0.00     0.00     0.00    19.69     0.00   32.17    0.92   46.22  28.32   0.00
  • rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge)
  • wrqm/s:每秒这个设备相关的写入请求有多少被Merge了
  • r/s:每秒向磁盘发起的读操作数
  • w/s:每秒向磁盘发起的写操作数
  • rkB/s:每秒读K字节数
  • wkB/s:每秒写K字节数
  • avgrq-sz:发送到设备的请求的平均大小,单位是扇区
  • avgqu-sz:平均请求队列的长度,队列长度越短越好,观察磁盘性能的核心指标
  • await:每个IO请求的处理的平均时间(以毫秒为单位)
  • r_await:每个读操作平均所需的时间;不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间
  • w_await:每个写操作平均所需的时间;不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间
  • svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)
  • %util:一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比,向设备发出I/O请求的经过时间百分比(设备的带宽利用率)。当串行服务请求的设备的该值接近100%时,将发生设备饱和。 但是对于并行处理请求的设备(例如RAID阵列和现代SSD),此数字并不反映其性能限制。这个指标高说明IO基本上就到瓶颈了,但是低也不一定IO就不是瓶颈。一般%util大于70%,I/O压力就比较大. 同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(I/O等待所占用的CPU时间的百分比,高过30%时I/O压力高)

 

测试案例

#向a.dat文件中写入8G的数据
dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct

从 iostat -mx 1 wMB/s可以看出,目前磁盘写入速率为1.19M之间(此为容器,磁盘为dm-12),从%util看出磁盘使用率也逐渐高达100%,但此时%iowait的值仍为0%

 

从 iostat -dk 1 MB_read/s也可以看出,磁盘写入速率为1.91~2.86

 

posted @ 2023-11-23 10:19  心恩惠动  阅读(67)  评论(0编辑  收藏  举报