我注意到 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
...
发生了什么事 - 我只是没有正确使用该工具吗?
我想我已经弄清楚了:该选项
-y
会抛出第一组结果,这是不现实的,并等待 iostat 进行完整采样。IOW,总是使用
iostat -y
- 或尝试sar -d -p 1 1