我使用iostat
并尝试通过此链接了解 iostat 输出:https://linoxide.com/linux-command/linux-iostat-command/但解释得不太清楚。
在 18:00:00 至 18:45:00 的不同时间对输出进行 PF:
我们在 18:45:00 收到数据库写入操作延迟
18:00:00
Linux 4.1.0-0.Node1.1-amd64 (Node1) 05/25/2018 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.58 0.00 0.84 0.14 0.00 96.44
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 20.45 318.11 272.61 4801729 4114908
loop0 15.24 15.29 0.00 230867 0
18:10:00
Linux 4.1.0-0.Node1.1-amd64 (Node1) 05/25/2018 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
4.54 0.07 1.67 0.28 0.00 93.44
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 66.79 450.28 6292.63 7071585 98824332
loop0 14.65 14.70 0.00 230867 0
18:20:00
Linux 4.1.0-0.Node1.1-amd64 (Node1) 05/25/2018 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
6.48 0.17 2.46 0.66 0.00 90.23
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 115.61 1712.27 13585.10 27917361 221496016
loop0 14.11 14.16 0.00 230892 0
18:30
Linux 4.1.0-0.Node1.1-amd64 (Node1) 05/25/2018 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
8.17 0.30 3.11 1.02 0.00 87.40
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 158.97 2682.65 19061.12 45347101 322206568
loop0 13.61 13.66 0.00 230892 0
18:40:00
Linux 4.1.0-0.Node1.1-amd64 (Node1) 05/25/2018 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
8.73 0.45 3.30 1.40 0.00 86.12
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 175.77 3647.19 19549.58 63840689 342197396
loop0 13.14 13.19 0.00 230930 0
18:45:00
Linux 4.1.0-0.Node1.1-amd64 (Node1) 05/25/2018 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
8.98 0.46 3.55 1.57 0.00 85.45
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 181.99 4116.60 19870.20 73291969 353769384
loop0 12.92 12.97 0.00 230930 0
我们在数据库写入时遇到了延迟18:45:00
,所以我想了解从18:00:00
到的IO 操作18:45:00
,并且上面的输出是否18:45:00
显示了 IO 中的任何问题?
答案1
我假设这是一个 SATA 磁盘系统,因此 181 TPS 是极限。您可以尝试iostat -x 1
获取一些扩展统计数据(下面的示例)。注意列%util
。这将告诉您磁盘的读/写负载是多少。我猜这接近 100% 并导致数据库问题。另一个指标是svctm
。这告诉您磁盘完成任何给定的 I/O 操作需要多长时间。数字越高,情况越糟。
调查此时正在运行的其他程序(数据库转储正在运行?备份?slocate/mlocate?)可能会导致 I/O 瓶颈。
$ iostat -x
Linux 4.4.0-124-generic (nebulus) 05/29/2018 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.03 0.00 0.00 99.94
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.35 0.18 0.40 3.23 7.03 35.07 0.00 1.17 0.71 1.38 0.29 0.02
dm-0 0.00 0.00 0.09 0.24 1.01 0.87 11.24 0.00 10.91 0.76 14.68 0.18 0.01
dm-1 0.00 0.00 0.07 0.29 1.69 4.17 32.90 0.00 2.33 0.59 2.74 0.23 0.01
如果您的利用率仍接近 100%,请与您的程序员交谈,看看他是否可以通过更高效的数据库查询来改善情况。如果这不可行,那么就投资一些更快的磁盘硬件(转移到 RAID0 或 SSD 磁盘)。
磁盘利用率过高也可能是由于系统可用 RAM 太少造成的。一旦内存紧张,就会开始进行磁盘交换,然后一切都会变得很慢。
只需开始寻找几个地方。