【测试】磁盘、CPU统计iostat工具

目录

iostat 例子

iostat 查看磁盘压力

iostat 的输出项说明

iostat 中的 %util 指标说明


iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

iostat 例子

  •  下面给出几个例子:

    # 显示一条包括所有的CPU和设备吞吐率的统计信息
    # iostat
    Linux 2.6.18-53.el5 (cnetos5)   01/21/2008
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.10    0.04    0.37    0.07    0.00   99.42
    
    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
    sda               1.44        16.79        10.58     800430     504340
    sdb               0.01         0.07         0.00       3314          8
    sdc               0.86         8.56         0.00     407892         24
    
    # 每隔5秒显示一次设备吞吐率的统计信息(单位为 块/s)
     iostat -d 5
    
    # 每隔5秒显示一次设备吞吐率的统计信息(单位为 KB/s),共输出3次
     iostat -dk 5 3
    
    # 每隔2秒显示一次 sda 及上面所有分区的统计信息,共输出5次
     iostat -p sda 2 5
    
    # 每隔2秒显示一次 sda 和 sdb 两个设备的扩展统计信息,共输出6次
     iostat -x sda sdb 2 6
    Linux 2.6.18-53.el5 (cnetos5)   01/21/2008
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.10    0.04    0.37    0.07    0.00   99.42
    
    Device:     rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
    sda           0.17     0.84  0.96  0.47    16.67    10.56    19.01     0.01    7.11   1.25   0.18
    sdb           0.00     0.00  0.01  0.00     0.07     0.00     5.16     0.00    0.22   0.19   0.00
    
    …………
    
    >iostat -t 5 -x > iostat.out
    
    
    -t是输出时间和日期,5是代表5秒一次,-x是详细情况都输出
    
    
    主要查看cpu的idle和磁盘的util





     

  • 深入理解:深入理解iostat :深入理解iostaticon-default.png?t=N7T8https://bean-li.github.io/dive-into-iostat/

iostat 查看磁盘压力

iostat -d -x

[root@node3 yum.repos.d]# iostat -d -x
Linux 5.15.67-11.cl9.x86_64 (node3) 2024-01-31 _x86_64_ (20 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 f/s f_await aqu-sz %util
loop0 0.62 142.62 0.00 0.00 0.18 230.69 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 0.00 0.02
sda 0.33 1.60 0.00 0.00 1.01 4.86 0.14 16.36 3.65 96.18 3.07 112.91 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.08
sdb 0.33 1.53 0.00 0.04 0.79 4.72 0.13 16.36 3.66 96.51 2.13 123.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.05
sdc 0.02 0.38 0.00 0.00 0.96 16.23 0.13 16.36

iostat 的输出项说明


rrqm/s:每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并。每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
wrqm/s:每秒对该设备的写请求被合并次数/每秒这个设备相关的写入请求有多少被Merge了。
r/s: 该设备的每秒完成的读请求数(merge合并之后的)
w/s:  该设备的每秒完成的写请求数(merge合并之后的)
rKB/s:rkB/s: 每秒读数据量(kB为单位),每秒发送给该设备的总读请求数 #rMB/s
wKB/s:每秒写数据量(kB为单位),每秒发送给该设备的总写请求数 #wMB/s
avgrq-sz 平均请求扇区的大小,平均每次IO操作的数据量(扇区数为单位)
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。  平均等待处理的IO请求队列长度
await:平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)。每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
r_await:读IO的响应时间
w_await:写IO的响应时间
(该参数已经废止,不可信)svctm: 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,
则表示I/O队列等待太长,系统上运行的应用程序将变慢。

Is the svctm's output of iostat unreliable as described within the man page? - Red Hat Customer Portal

svctm: 平均每次IO请求的处理时间(毫秒为单位) (该参数已经废止,不可信)
 

%util: 在统计时间内IO操作的时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒有IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,但不代表已经到达了磁盘性能极限的80%,因为现在的磁盘大多可以并行的,详情见末尾)。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。

  • avg-cpu 部分输出项说明:

    %user在用户级别运行所使用的 CPU 的百分比。
    %nicenice 操作所使用的 CPU 的百分比。
    %system在核心级别(kernel)运行所使用 CPU 的百分比。
    %iowaitCPU 等待硬件 I/O 所占用 CPU 的百分比。
    %steal当管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
    %idleCPU 空闲时间的百分比。

    Device 部分基本输出项说明:

    tps每秒钟物理设备的 I/O 传输总量。
    Blk_read读入的数据总量,单位为块。
    Blk_wrtn写入的数据总量,单位为块。
    kB_read读入的数据总量,单位为KB。
    kB_wrtn写入的数据总量,单位为KB。
    MB_read读入的数据总量,单位为MB。
    MB_wrtn写入的数据总量,单位为MB。
    Blk_read/s每秒从驱动器读入的数据量,单位为 块/s。
    Blk_wrtn/s每秒向驱动器写入的数据量,单位为 块/s。
    kB_read/s每秒从驱动器读入的数据量,单位为KB/s。
    kB_wrtn/s每秒向驱动器写入的数据量,单位为KB/s。
    MB_read/s每秒从驱动器读入的数据量,单位为MB/s。
    MB_wrtn/s每秒向驱动器写入的数据量,单位为MB/s。

    Device 部分扩展输出项说明:

    rrqm/s将读入请求合并后,每秒发送到设备的读入请求数。
    wrqm/s将写入请求合并后,每秒发送到设备的写入请求数。
    r/s每秒发送到设备的读入请求数。
    w/s每秒发送到设备的写入请求数。
    rsec/s每秒从设备读入的扇区数。
    wsec/s每秒向设备写入的扇区数。
    rkB/s每秒从设备读入的数据量,单位为 KB/s。
    wkB/s每秒向设备写入的数据量,单位为 KB/s。
    rMB/s每秒从设备读入的数据量,单位为 MB/s。
    wMB/s每秒向设备写入的数据量,单位为 MB/s。
    avgrq-sz发送到设备的请求的平均大小,单位为扇区。
    avgqu-sz发送到设备的请求的平均队列长度。
    awaitI/O请求平均执行时间。包括发送请求和执行的时间。单位为毫秒。
    svctm发送到设备的I/O请求的平均执行时间。单位为毫秒。 (该参数已经废止,不可信)

iostat 中的 %util 指标说明

判断磁盘极限性能误区:只通过iostat 中的 %util 指标确定磁盘是否达到带宽或iops极限

背景:

    在判断磁盘是否达到极限性能时,总有人通过 iostat -x 中的 %util 指标来确认磁盘是否带宽带宽或IOPS瓶颈,其实这是不对的,特做如下说明:

结论:

    iostat 中的 %util 基本已经没有任何作用了,svctm也没什么参考意义

    磁盘是否达到真正极限瓶颈,需要参考通过fio等工具压测出的极限带宽和IOPS值

%util与硬盘设备饱和度

    %util表示该设备有I/O(即非空闲)的时间比率,不考虑I/O有多少,只考虑有没有。

对于以上示例输出,我们可以获取到以下信息:

每秒向磁盘上写30M左右数据(wkB/s值)
每秒有91次IO操作(r/s+w/s),其中以写操作为主体
平均每次IO请求等待处理的时间为120.57毫秒,处理耗时为6.33毫秒
等待处理的IO请求队列中,平均有11.79个请求驻留
 

以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:

util = (r/s+w/s) * (svctm/1000)

对于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603

    由于现代硬盘设备都有并行处理多个I/O请求的能力,所以%util即使达到100%也不意味着设备饱和了。

    举个简化的例子:某硬盘处理单个I/O需要0.1秒,有能力同时处理10个I/O请求,那么当10个I/O请求依次顺序提交的时候,需要1秒才能全部完成,在1秒的采样周期里%util达到100%;而如果10个I/O请求一次性提交的话,0.1秒就全部完成,在1秒的采样周期里%util只有10%。可见,即使%util高达100%,硬盘也仍然有可能还有余力处理更多的I/O请求,即没有达到饱和状态。

    那么iostat(1)有没有哪个指标可以衡量硬盘设备的饱和程度呢?很遗憾,没有。

参考文章:

【1】容易被误读的IOSTAT: http://linuxperf.com/?p=156

【2】深入理解iostat: https://bean-li.github.io/dive-into-iostat/


-----------------------------------
©著作权归作者所有:来自51CTO博客作者党志强的原创作品,如需转载,请注明出处,否则将追
https://blog.51cto.com/dangzhiqiang/2440962

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
iostat是一个用于查看系统磁盘IO状态的命令行工具,可以帮助我们分析磁盘压力。通过运行iostat命令,我们可以获取关于磁盘读写速度、磁盘队列长度等信息。 在使用iostat命令时,我们可以添加参数来指定查询的磁盘和时间间隔。例如,`iostat -x 1`表示每秒钟查询一次磁盘IO数据,并显示所有磁盘的详细信息。 通过iostat我们可以了解以下信息: 1. 设备名称:列出了系统中每个磁盘设备的名称,帮助我们区分不同磁盘。 2. 磁盘传输速率:显示每秒钟磁盘的平均读取和写入速率,以MB/s为单位。 3. 磁盘队列长度:表示磁盘I/O请求的平均等待时间。如果队列长度过高,可能意味着系统磁盘负载过重,可能导致性能下降。 4. 平均响应时间:显示磁盘I/O请求的平均处理时间,以毫秒为单位。较高的响应时间可能表示磁盘访问延迟。 5. 错误率:显示磁盘传输过程中出现的错误率,如读写错误、超时等。 6. CPU利用率:显示系统中每个CPU磁盘负载百分比,帮助我们了解磁盘压力对CPU的影响。 7. 磁盘饱和度:显示每个磁盘的I/O操作的百分比,以反映磁盘的利用率。 总而言之,通过iostat命令我们可以实时监测系统中的磁盘压力,分析其读写速率、队列长度、响应时间等指标,帮助我们优化磁盘使用和调整系统配置,以提高系统的整体性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值