磁盘IO监测方法,了解一下?

一、磁盘IO核心指标

 

在磁盘测试中最关心的几个指标分别为:iops(每秒执行的IO次数)、bw(带宽,每秒的吞吐量)、lat(每次IO操作的延迟)。

 

磁盘的 IOPS,也就是在一秒内,磁盘进行多少次 I/O 读写。

磁盘的吞吐量,也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。

 

当每次IO操作的block较小时,如512bytes/4k/8k等,此时更能体现的是磁盘读写的频率特性,即磁盘的IOPS,所以这时测试的是性能指标IOPS。

 

当每次IO操作的block较大时,如256k/512k/1M等,此时更能体现的是磁盘最大允许的带宽流量特性,即磁盘的吞吐量bw,所以这时测试的是性能指标BW。

 

因此,我们会认为 IOPS 和吞吐量的数值越高越好。实际上,对于一个磁盘来讲,这两个参数均有其最大值,而且这两个参数也存在着一定的关系。

 

二、IOPS测试的影响因素

 

另外,对于同一个磁盘(或者 LUN),随着每次 I/O 读写数据的大小不同,IOPS 的数值也不是固定不变的。

 

例如,每次 I/O 写入或者读出的都是连续的大数据块,此时 IOPS 相对会低一些;在不频繁换道的情况下,每次写入或者读出的数据块小,相对来讲 IOPS 就会高一些。

 

也就是说,IOPS 也取决于I/O块的大小,采用不同I/O块的大小测出的IOPS值是不同的。 对一个具体的IOPS, 可以了解它当时测试的I/O块的尺寸。

 

三、监控linux磁盘IO工具:iostat

 

Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具具备对系统磁盘操作活动监视的功能呢。它可以采集并统计磁盘活动情况,同时会汇报出CPU的使用情况。iostat是sysstat工具集的一个工具,安装方式如下:

#Centos的安装方式是: y

um install sysstat

 

#Ubuntu的安装方式是:

apt install sysstat

 

安装成功后使用下列命令查看磁盘使用情况:

iostat -dx

 

结果如下:

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 0.00 0.00 0.00 0.00 0.00 0.00 0.00

vda 0.00 1.00 0.00 4.00 0.00 20.00 10.00 0.02 5.00 0.00 5.00 5.00 2.00

 

结果分析:

rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s

wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s

r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s

w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s

 

 

rsec/s: 每秒读扇区数。即 delta(rsect)/s

wsec/s: 每秒写扇区数。即 delta(wsect)/s

 

 

rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)

wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)

 

 

avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)

avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。

 

 

await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)

svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)

 

 

%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

 

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

%util高于30,IO压力就较大了,一般读取速度有较多的wait.

 

 

如果想连续测试多次磁盘IO的情况,可用如下命令:

iostat -dkx 1 5

#参数1:每隔1s统计一次

#参数5:统计5次

 

接下来,我们用实际的例子来测试一下磁盘实时使用情况和性能,并实际使用iostat进行分析。

 

四、测试磁盘读写性能并利用iostat实时获取磁盘使用情况

 

1、写入性能

首先开一个控制台利用dd命令进行文件写入:

root@27-58:~# dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct

 

此时,再开一个控制台利用iostat命令查看磁盘的使用情况

root@27-58:~#iostat -dkx 1 5

 

结果如下:

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 0.00 0.00 0.00 0.00 0.00 0.00 0.00

vda 0.00 0.00 0.00 1057.00 0.00 8456.00 16.00 0.90 0.86 0.00 0.86 0.85 92.00

可以看到磁盘的利用率已经达到92%(%util=92%),每秒写入8456K字节数据。

 

性能测试结果:

root@27-58:~# dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct

^C469480+0 records in

469480+0 records out

3845980160 bytes (3.8 GB, 3.6 GiB) copied, 272.613 s, 14.1 MB/s

2、读性能

同样在一个控制台利用dd命令进行一直读文件测试,此时在另一个控制台用: iostat -dkx 1 5 命令进行测试:

结果如下:

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 0.00 0.00 0.00 0.00 0.00 0.00 0.00

vda 0.00 16.00 352.00 8.00 2816.00 88.00 16.13 1.07 3.01 2.85 10.00 2.74 98.80

看到持续的读文件时,磁盘IO利用率达到98%,磁盘处于满负荷状态。

 

读性能的最终测试结果:

root@27-58:~# dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct

469480+0 records in

469480+0 records out

3845980160 bytes (3.8 GB, 3.6 GiB) copied, 164.976 s, 23.3 MB/s

总结:以上只是测IOPS,因为设置的block比较小,调大之后就可以测试磁盘IO的bw了。

 

喜欢本文的朋友,欢迎关注、转发、评论,让我们一起成为有智慧的架构师!

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值