linux运维一天一个shell命令之iostat详解

运维人,搬砖魂;一天一个基础命令,助你夯实地基

1.概念:

iostat 是一个监控工具,用于报告系统的 CPU 使用率和设备 I/O 统计信息。它是 Unix 和类 Unix 操作系统(如 Linux 和 BSD)上的一个命令行工具,属于 sysstat 包的一部分。iostat 可以帮助系统管理员和用户了解系统的 I/O 子系统性能,诊断 I/O 瓶颈并优化系统性能。

2.iostat 工具的主要功能

  • CPU 使用率:显示系统的 CPU 使用情况,包括用户时间、系统时间和空闲时间等。
  • 设备 I/O 统计:提供每个存储设备的 I/O 统计信息,如每秒传输的块数、每秒读取和写入的请求数等。
  • 分区 I/O 统计:不仅显示整个设备的 I/O 统计信息,还可以显示特定分区的统计信息。
  • 文件系统 I/O 统计:某些版本的 iostat 还可以显示文件系统级别的 I/O 统计信息。

3.iostat 的基本用法

语法:

iostat [options] [interval [count]]


interval:报告之间的间隔时间(以秒为单位)。
count:报告的次数。

常用选项:

-c:显示 CPU 使用统计。
-d:显示设备 I/O 统计。
-x:显示扩展的设备 I/O 统计(包含更多详细信息)。
-k:以千字节为单位显示统计信息。
-m:以兆字节为单位显示统计信息。
-t:显示时间戳。
-N:显示 NFS 统计(如果适用)。

用法:

  • 显示总的 CPU 和设备 I/O 统计
root@:~# iostat

Linux 4.15.0-147-generic (your_hostname)  08/01/2024      _x86_64_        (48 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.06    0.00    0.04    0.00    0.00   99.89

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
loop0             0.00         0.00         0.00          8          0
vda               0.88         1.10        10.74    1436115   14089636
vdb               0.00         0.00         0.00        240          0
vdd               0.03         0.11         0.00     147389          0
vde               0.05         0.22         0.00     284237          0
vdf               0.13         0.36         1.45     469361    1907200
vdg               0.00         0.00         0.00       5192          0
vdh               0.00         0.00         0.00       6349          4
vdi               0.10         0.42         0.00     545941          0
vdj               0.25         1.02         0.00    1342121          0
vdc               0.00         0.00         0.00       1048          0


root@:~# iostat  sdb      ###显示指定设备信息
iostat    vdb
Linux 4.15.0-147-generic (your_hostname)  08/01/2024      _x86_64_        (48 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.06    0.00    0.04    0.00    0.00   99.89

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vdb               0.00         0.00         0.00        240          0

  • 每 3秒显示一次 CPU 和设备 I/O 统计,共显示 5 次
root@:~# iostat 3 5
  • 显示扩展的设备 I/O 统计,每 3 秒显示一次,共显示 5 次
root@:~# iostat -x 3 5
  • 显示 CPU 使用统计,每 3 秒显示一次,共显示 5 次
root@:~# iostat -c 3 5
  • 显示分区统计信息,以兆为单位
root@:~# iostat -p  vda -m 
Linux 4.15.0-147-generic (your_hostname)  08/01/2024      _x86_64_        (48 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.06    0.00    0.04    0.00    0.00   99.89

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
vda               0.88         0.00         0.01       1402      13768
vda1              0.88         0.00         0.01       1401      13768

输出字段解释

  • cpu 统计信息
root@:~#  iostat  -c 
Linux 4.15.0-147-generic (you_hostname)  08/01/2024      _x86_64_        (48 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.06    0.00    0.04    0.00    0.00   99.89

#注解:
内核信息  主机名  时间   cpu架构   cpu核心数
%user:在用户模式下执行的 CPU 时间百分比(不包括 nice)。
%nice:在用户模式下执行的 CPU 时间百分比(包括 nice)。
%system:在内核模式下执行的 CPU 时间百分比。
%iowait:CPU 等待 I/O 操作完成的时间百分比。
%steal:虚拟化环境中等待实际 CPU 的时间百分比。
%idle:CPU 空闲时间的百分比。

  • 设备I/O统计信息
root@:~#  iostat  -d
Linux 4.15.0-147-generic (you_hostname)  08/01/2024      _x86_64_        (48 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
loop0             0.00         0.00         0.00          8          0
vda               0.88         1.09        10.74    1436115   14095304
vdb               0.00         0.00         0.00        240          0
vdd               0.03         0.11         0.00     147389          0
vde               0.05         0.22         0.00     284237          0
vdf               0.13         0.36         1.45     469361    1907200

#注解:
Device:设备名称。
tps:每秒传输数(I/O 请求数)。
kB_read/s:每秒读取的千字节数。
kB_wrtn/s:每秒写入的千字节数。
kB_read:读取的总千字节数。
kB_wrtn:写入的总千字节数。

  • 扩展的设备 I/O 统计信息
root@:~#  iostat  -xd
Linux 4.15.0-147-generic (your_hostname)  08/01/2024      _x86_64_        (48 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
loop0             0.00     0.00    0.00    0.00     0.00     0.00     3.20     0.00    0.00    0.00    0.00   0.00   0.00
vda               0.00     0.93    0.08    0.80     1.09    10.74    26.94     0.00    0.06    0.39    0.03   0.00   0.00
vdb               0.00     0.00    0.00    0.00     0.00     0.00     7.62     0.00    0.19    0.19    0.00   0.00   0.00
vdd               0.00     0.00    0.03    0.00     0.11     0.00     8.30     0.00    0.51    0.51    0.00   0.01   0.00
vde               0.00     0.00    0.05    0.00     0.22     0.00     8.15     0.00    0.36    0.36    0.00   0.01   0.00
vdf               0.00     0.32    0.09    0.05     0.36     1.45    26.96     0.01   90.82   30.78  206.59   3.64   0.05

#注解:
rrqm/s:每秒合并的读取请求数(操作系统将多个读取请求合并为一个)。
wrqm/s:每秒合并的写入请求数(操作系统将多个写入请求合并为一个)。
r/s:每秒读请求数。
w/s:每秒写请求数。
rMB/s:每秒读取的兆字节数。
wMB/s:每秒写入的兆字节数。
avgrq-sz:平均请求大小(扇区数)。
avgqu-sz:平均请求队列长度。
await:平均每个 I/O 操作的等待时间(毫秒)。
r_await:平均每个读操作的等待时间(毫秒)。
w_await:平均每个写操作的等待时间(毫秒)。
svctm:平均每个 I/O 操作的服务时间(毫秒)。
%util:设备忙碌时间的百分比(即有 I/O 操作的时间百分比)

4.使用iostat排查系统问题

1)初步了解系统状态

运行 iostat 不带任何参数,获取系统的概况。

root@:~#  iostat

检查输出的 CPU 使用率和设备 I/O 统计信息。主要关注以下几点:

  • CPU 的 %iowait 值。如果这个值很高,表示 CPU 大量时间在等待 I/O 操作完成,可能存在 I/O 瓶颈。
  • 设备的 tps(每秒传输数)、kB_read/s 和 kB_wrtn/s。这些值反映了设备的 I/O 活动。

2)获取详细的 I/O 统计信息

了解系统的 I/O 状况,使用 -x 选项获取扩展的 I/O 统计信息。

root@:~#  iostat -xd

观察以下关键指标:

  • await:平均每个 I/O 操作的等待时间。如果该值较高,表示 I/O 操作等待时间过长。
  • avgqu-sz:平均请求队列长度。如果该值较高,表示设备的 I/O 请求队列较长,可能存在 I/O 瓶颈。
  • %util:设备忙碌时间的百分比。如果该值接近 100%,表示设备已达到其 I/O 处理能力的上限。

3)持续观察

观察系统在不同时间段的 I/O 状况,可以指定间隔时间和次数,持续观察。

iostat -x 5 15

每 5 秒输出一次统计信息,共输出 125次。持续监控有助于识别间歇性的 I/O 问题。

4)分析特定设备

如果怀疑某个特定设备存在问题,可以指定设备名称,进一步分析该设备的详细 I/O 统计信息。

iostat -xd sda

5)结合其他工具进行综合分析

为了更全面地了解系统性能,可以结合其他工具进行综合分析。例如,使用 vmstat 监控内存、CPU 和 I/O 状况,或者使用 sar 进行更详细的系统性能监控。

root@:~#   vmstat 1 10  # 每秒显示一次系统性能统计信息,共显示 10 次
root@:~#  sar -d 1 10  # 每秒显示一次磁盘 I/O 统计信息,共显示 10 次

6)示例

现象:

假设你使用 iostat -x 获取了以下输出:

root@:~#   iostat -x 
Device            rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    50.00   50.00   1000.00  1000.00    40.00     1.50   15.00   10.00   20.00   5.00  75.00

分析结论:

  • r/s 和 w/s 表示每秒读写请求数为 50 次。
  • await(平均等待时间)为 15 毫秒,这表明 I/O 操作的平均等待时间较长。
  • %util(设备忙碌时间)为 75%,表明设备忙碌但尚未达到其极限。

处理方式:

在高等待时间(await)时的行动步骤
  • 检查队列长度:高 await 可能与高 avgqu-sz 相关,表明设备上有较长的 I/O 请求队列。增加队列长度可能有助于提高效率,但要小心避免过度增加。
  • 优化 I/O 负载:检查是否可以优化应用程序的 I/O 负载,减少不必要的 I/O 操作。
  • 硬件升级:如果设备经常处于高负载,考虑升级硬件,如使用更快的磁盘或 SSD。
在高设备利用率(%util)时的行动步骤
  • 负载均衡:将 I/O 负载分散到多个设备上,避免单个设备成为瓶颈。
  • RAID 配置:使用 RAID 配置可以提高 I/O 性能和可靠性。
  • 缓存优化:调整系统和应用程序的缓存策略,减少对磁盘的直接访问。
  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值