iostat

是sysstat集中的一个工具,用于监视系统IO设备负载

1
2
3
4
5
6
7
8
[root@racknerd-554eb1 ~]# iostat
Linux 3.10.0-1160.108.1.el7.x86_64 (racknerd-554eb1)    04/08/2024      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.13    0.00    0.12    0.04    0.67   99.04

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.61         0.07         6.73     324641   29391884

不加参数的输出,结果包含两部分:

  • cpu(平均值)
    • user 用户模式下所花费cpu时间 一般<60%
    • nice 一般不看
    • system 内核进程所花费cpu时间 一般sy+us<80%
    • iowait IO等待所占用CPU时间 一般<30% (不同功能服务器不同)
    • steal 丢失时间占用CPU,不怎么看
    • idle CPU中断(空闲)时间

结论(一般来说):

  • idle 持续游走20%以下,瓶颈在CPU

  • iowait高,idle 70%以上,瓶颈在IO设备上

  • 存储设备信息

    • device 设备名
    • tps transfer per second 每秒接受的IO传输请求
      • kB_read/s 每秒读取数据量
    • kB_wrtn/s 每秒写入数据量
    • kB_read 总读取数据量
    • kB_wrtn 总写入数据量

结论:无参数的iostat,IO状态是指系统启动以来的全部计数(因此不要看这个,是不准确的),而不是当前的。可以用iostat 1 2输出的第2组值来作为实时的(表示间隔1秒输出1次,共输出2次。其中第1次是启动以来的,第2次是间隔1秒后的)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@racknerd-554eb1 ~]# iostat 1 2
Linux 3.10.0-1160.108.1.el7.x86_64 (racknerd-554eb1)    04/08/2024      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.13    0.00    0.12    0.04    0.67   99.04

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.61         0.07         6.73     324753   29400288

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    1.00   99.00

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.00         0.00         0.00          0          0

常用参数:

  • -N device翻译为映射名
  • -m 读取写入量以MB为单位
  • -x 显示详细信息
  • -d 隐藏上半部分的cpu信息
  • -p 显示磁盘和分区的情况
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[root@racknerd-554eb1 ~]# iostat -d -x -N -p                                                   

Linux 3.10.0-1160.108.1.el7.x86_64 (racknerd-554eb1)    04/08/2024      _x86_64_        (2 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_a

wait w_await  svctm  %util                                                                     

vda               0.00     0.94    0.00    0.60     0.07     6.72    22.36     0.00    3.92    

1.87    3.93   1.81   0.11                                                                     

vda1              0.00     0.94    0.00    0.60     0.07     6.72    22.38     0.00    3.92    

1.86    3.93   1.82   0.11                                                                     

vda2              0.00     0.00    0.00    0.00     0.00     0.00    80.87     0.00    3.04    

3.04    0.00   3.40   0.00

-x输出详细信息的情况下,关注:

  • r/s 每秒完成的读次数
  • w/s 每秒完成的写次数
  • avgrq-s 平均IO数据大小,扇区为单位
  • avgqu-sz 平均队列长度
  • await 平均等待时间
  • %util IO利用率

结论:iostat输出结果,cpu+device可以明确IO是否有问题,device确定有问题的device所在(看await是否超过理论上的不饱和时间,即正常处理时间)

参考链接

https://www.bilibili.com/video/BV1rZ4y137Mo/?spm_id_from=333.337.search-card.all.click&vd_source=388c468b983bcf7b800d0e7cfb9fc719