系统io wait高排查

top -sc # 安全模式、显示进程

主要判断指标:
%us 过高,则可以在对应服务的线程ID查看具体详情,是否存在死循环,或者长时间的阻塞调用。
%sy 过高,则先使用 strace 定位具体的系统调用,再定位是哪里的应用代码导致的。
%si 过高,则可能是网络问题导致软中断频率飙高。
%wa 过高,则是频繁读写磁盘导致的,可以通过 iostat,iotop。


# -x 指明输出更加详细的信息,2 5 表示间隔2秒统计一次总共输出5次。
# 第一行结果是自系统启动以来的统计值,通常排查突发的I/O异常时可忽略。
# 重点看 %util 列,表示进程使用 I/O 的比例
iostat -x 2 5


# 如果 iostat 中输出带有 dm-1 这样的虚拟设备,可以使用如下命令找到对应的设备
ll /dev/mapper/


# 使用iotop 找出引起高I/O的进程
iotop

# 如果没有安装 iotop 可以使用其他命令代替
# 如果进程正在等待I/O,进行的状态码经常为D。通过这个信息,我们可以大概估算出哪些进程在I/O等待中
for x in `seq 1 1 10`; do ps -eo state,pid,cmd | grep "^D"; echo "----"; sleep 5; done

# 进一步用/proc目录下的信息来定位
cat /proc/27456/io
rchar: 42857442
wchar: 35657666
syscr: 44932
syscw: 9744
read_bytes: 1530859520
write_bytes: 13824000
cancelled_write_bytes: 1249280


注意:还有一些特殊情况 得具体问题具体分析