当将数据从硬盘复制sdc
到时sda
,我注意到每秒完成的读取请求数异常低:
$ iostat -x 1 1
Linux 3.13.0-32-generic (melancholy) 2014-08-15 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.15 0.00 0.94 1.91 0.00 94.00
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.15 6.43 0.37 4.85 14.17 2154.46 829.68 1.35 258.80 26.50 276.74 2.89 1.51
sdb 0.02 1.08 0.63 1.91 10.48 86.95 76.56 0.13 50.08 4.89 65.06 2.98 0.76
sdc 0.35 1.10 29.15 0.18 2140.15 5.11 146.32 0.29 9.98 9.39 107.21 2.12 6.22
进一步挖掘,似乎每次我开始时iostat
第一行都会报告很多 r/s:
$ sudo iostat -x 1 3
Linux 3.13.0-32-generic (melancholy) 2014-08-15 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.15 0.00 0.94 1.95 0.00 93.96
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.15 6.43 0.38 4.98 14.29 2219.15 832.86 1.39 259.93 25.96 277.93 2.89 1.55
sdb 0.02 1.08 0.63 1.91 10.47 86.84 76.55 0.13 50.06 4.89 65.02 2.98 0.76
sdc 0.35 1.10 29.91 0.18 2206.09 5.11 146.98 0.30 10.00 9.43 107.21 2.12 6.37
avg-cpu: %user %nice %system %iowait %steal %idle
1.00 0.00 2.01 24.56 0.00 72.43
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 5.00 0.00 2.00 0.00 28.00 28.00 0.03 14.00 0.00 14.00 14.00 2.80
sdb 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
sdc 0.00 0.00 498.00 0.00 42496.00 0.00 170.67 5.35 10.74 10.74 0.00 2.01 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 2.75 40.75 0.00 56.00
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 0.00 0.00 274.00 0.00 139648.00 1019.33 114.82 304.88 0.00 304.88 2.93 80.40
sdb 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
sdc 0.00 0.00 500.00 0.00 42632.00 0.00 170.53 5.34 10.70 10.70 0.00 2.00 100.00
$ sudo iostat -x 1 3
Linux 3.13.0-32-generic (melancholy) 2014-08-15 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.15 0.00 0.94 1.95 0.00 93.96
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.15 6.43 0.38 4.99 14.29 2223.10 833.13 1.40 260.11 26.00 278.09 2.89 1.55
sdb 0.02 1.08 0.63 1.91 10.46 86.84 76.55 0.13 50.06 4.89 65.02 2.98 0.76
sdc 0.35 1.10 29.94 0.18 2208.18 5.11 147.00 0.30 10.00 9.43 107.21 2.12 6.37
avg-cpu: %user %nice %system %iowait %steal %idle
1.00 0.00 2.00 24.50 0.00 72.50
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.00 0.00 2.00 0.00 36.00 36.00 0.02 10.00 0.00 10.00 10.00 2.00
sdb 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
sdc 0.00 0.00 496.00 0.00 42360.00 0.00 170.81 5.27 10.60 10.60 0.00 2.02 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 2.26 23.81 0.00 73.43
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 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 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
sdc 0.00 0.00 499.00 0.00 42616.00 0.00 170.81 5.29 10.61 10.61 0.00 2.00 100.00
$ sudo iostat -x 1 3
Linux 3.13.0-32-generic (melancholy) 2014-08-15 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.15 0.00 0.94 1.96 0.00 93.96
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.15 6.43 0.38 4.99 14.29 2223.99 833.18 1.40 260.12 26.00 278.10 2.89 1.55
sdb 0.02 1.08 0.63 1.91 10.46 86.83 76.55 0.13 50.06 4.89 65.02 2.98 0.76
sdc 0.35 1.10 29.97 0.18 2210.82 5.11 147.03 0.30 10.00 9.43 107.21 2.12 6.38
avg-cpu: %user %nice %system %iowait %steal %idle
1.25 0.00 2.01 26.07 0.00 70.68
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 5.00 0.00 3.00 0.00 32.00 21.33 0.10 34.67 0.00 34.67 34.67 10.40
sdb 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
sdc 0.00 0.00 499.00 0.00 42616.00 0.00 170.81 5.38 10.77 10.77 0.00 2.00 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 2.49 25.44 0.00 71.57
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 0.00 0.00 175.00 0.00 86040.00 983.31 40.06 228.89 0.00 228.89 2.77 48.40
sdb 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
sdc 0.00 0.00 500.00 0.00 42632.00 0.00 170.53 5.41 10.82 10.82 0.00 2.00 100.00
这是有问题的,因为这意味着我无法自动监控,iostat
因为初始读数是错误的。我可以通过运行监控脚本iostat -x 1 2
并忽略第一个输出来解决这个问题,但我真的想了解为什么这是必要的。为什么每次运行的第一份报告都显示活动性如此之低?
为了澄清起见,我指的是将数据(数百 GiB)从该磁盘复制到时r/s
的值。在每次运行中,的第一个值约为 29,而每个后续的值都接近 500。sdc
sda
iostat
r/s
sdc
r/s
sdc
这是为什么?
答案1
引用iostat
手册页:
iostat 命令生成的第一个报告提供了自系统启动以来的统计信息,除非使用 -y 选项,此时第一个报告将被省略。每个后续报告涵盖自上一个报告以来的时间。
这意味着第一次读取将显示一个较低的值,因为它是启动以来的平均值,可能较低。使用-y
将删除此初始读取。
答案2
尽量使用cat /proc/diskstats
它,因为它更可预测。如果您使用 zabbix 或 nagios 自动监控,您总是可以计算出先前值和新值之间的差异。
如果我没记错的话,iostat 也使用 /proc/diskstats。