IO HANG 其实就是 IO 假死,一般来说可能是 IO 负载过高导致的。IO 负载高的原因也有可能是因为内存不足导致启用了 swap,频繁的对swap 进行读写而导致的 IO 高。
在Linux 中,我们可以通过一些工具来判断当前系统的 IO 状态。
iostat
示例用法
更多说明可以man 查看说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [root@aliyun fwj]# iostat -d -k 3 Linux 4.20.13-1.el7.elrepo.x86_64 (aliyun) 2019年03月05日 _x86_64_ (1 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 1.46 7.94 34.18 2899273 12489384
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 2.51 0.00 14.07 0 28
|
iotop
说明
- 默认情况下按照 IO 使用量倒序排序,可以用左右箭头操作排序的字段。
- 按 r 切换排序方式。
- 按 o 只显示有磁盘 IO 活动的进程。
- 更多参数及返回结果说明,可以参阅 iotop 的 man 帮助。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 39.22 K/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1359 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.19 % [jbd2/vda1-8] 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_gp] 4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_par_gp] 6 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H-kblockd] 8 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq] 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched] 11 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 3084 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % rsyslogd -n [rs:main Q:Reg] 13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [cpuhp/0] 14 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kdevtmpfs] 15 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [netns] 16 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kauditd] 17 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khungtaskd] 18 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [oom_reaper] 19 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [writeback] 20 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kcompactd0] 21 be/5 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksmd] 22 be/7 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khugepaged] 23 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [crypto] 24 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kintegrityd] 25 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kblockd] 26 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [tpm_dev_wq] 27 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [md] 28 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [edac-poller] 29 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [devfreq_wq] 30 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdogd] 13343 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --defa~ux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2 13344 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --defa~ux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2 13345 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --defa~ux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2 34 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kswapd0] 13347 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --defa~ux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2 13348 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --defa~ux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2 13349 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --defa~ux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2 3111 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % AliYunDunUpdate 3113 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % AliYunDunUpdate 3114 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % AliYunDunUpdate 3119 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % AliYunDunUpdate 3081 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % rsyslogd -n [in:imjournal] 13913 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:1-events] 24179 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % docker-proxy-current -proto tcp -host-ip 0.0.0.0 -host-port 443 -container-ip 172.17.0.2 -container-port 443 2309 be/4 chrony 0.00 B/s 0.00 B/s 0.00 % 0.00 % chronyd 24184 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % docker-proxy-current -proto tcp -host-ip 0.0.0.0 -host-port 443 -container-ip 172.17.0.2 -container-port 443 121 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthrotld] 122 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [acpi_thermal_pm] 123 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kmpath_rdacd] 124 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kaluad]
|
free
通过查看内存的swap 分区是否占用过高也可以辅助判断IO 负载是否过高。
1 2 3 4
| [root@aliyun fwj]# free -h total used free shared buff/cache available Mem: 985M 165M 272M 1.5M 547M 644M Swap: 0B 0B 0B
|