最近 SSH 登录客户的 CentOS7 敲命令卡顿,连按 tab 补全键都卡,服务器和内存配置都很高因此排除是它们引起的。
执行 top 命令发现 CPU wa 值很高,如下图,说明CPU资源在等待I/O,由此判断是因为I/O原因导致了操作卡顿:
再用 iotop 命令,可以查看是哪个进程占用了I/O:
上图可以看到 microk8s 进程 IO利用率达到了 100%。去跟客户确认后,说给我们分配的是网络硬盘,读写速度不快!
CentOS7 默认是没有安装 iotop 命令的,可以使用 yum -y install iotop 命令安装。另外网上也有人用 ps 命令来排查的:
# ps命令能打印出内存,cpu的情况但没办法打印出硬盘I/O的情况。虽然ps没办法打印出I/O的情况, # 但可以显示出进程是否在等待I/O。等待I/O的进程通常处于uninterruptible、sleep或D状态, # 通过这些信息可以大致查找出处在wait状态的进程。 for x in `seq 1 10`;do ps -eo state,pid,cmd|grep "^D";echo "---";sleep 5;done