我注意到 iostat 有一些令人担忧的地方,但我无法解释——iostat 似乎不太可靠(?)
我正在尝试排除 MySQL 性能不佳的故障,一个明显需要查看的地方是磁盘,因此:
ip-10-14-4-14 root : iostat -x nvme2n1
Linux 5.4.0-1029-aws (ip-10-14-4-14) 10/27/21 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.19 0.00 0.47 0.84 0.00 97.49
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 aqu-sz %util
nvme2n1 4.93 160.70 0.26 4.95 0.53 32.60 216.03 6863.39 57.07 20.90 0.78 31.77 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16.50
看起来还不错 -%util
只有 16.5;但是:
ip-10-14-4-14 root : iostat -y 1 -x nvme2n1
Linux 5.4.0-1029-aws (ip-10-14-4-14) 10/27/21 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
4.65 0.00 1.26 1.13 0.00 92.96
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 aqu-sz %util
nvme2n1 10.00 160.00 0.00 0.00 0.40 16.00 2058.00 40260.00 326.00 13.67 0.65 19.56 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
相同的系统,几乎同时,但现在%util
是 100。我甚至尝试循环运行第一个版本,然后%util
保持低位:
for i in $(seq 1 50); do iostat -x nvme2n1; done
Linux 5.4.0-1029-aws (ip-10-14-4-14) 10/27/21 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.19 0.00 0.48 0.84 0.00 97.49
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 aqu-sz %util
nvme2n1 4.93 160.70 0.26 4.95 0.53 32.59 216.32 6868.15 57.10 20.88 0.78 31.75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16.51
...
这是怎么回事?是不是我没有正确使用该工具?
答案1
我想我已经明白了:该选项-y
会抛出第一组不可靠的结果,并等待 iostat 进行完整采样。
换句话说,总是使用iostat -y
-或者尝试sar -d -p 1 1