一次 openat /etc/resolv.conf hung 排查过程
由来
客户环境机器经常卡死,tty 都进不去,这次卡死了大部分后能 ssh ,客户让我们远程上去查看
排查过程
信息
1 | $ uname -a |
过程
先拉起业务的,发现 docker daemon 无法启动:
1 | systemctl start docker |
会一直卡住,stop 则会报错 operator timeout。然后 systemctl cat --no-pager docker
后使用 ExexStart
来前台启动也卡住:
1 | dockerd --debug |
然后 strace 下:
1 | $ strace dockerd --debug |
一直卡在这里,ctrl + c
都无法取消,再开个 ssh 上去 cat 发现卡住
1 | $ ls -l /etc/resolv.conf |
发现 crontab -l
也会卡住,strace crontab -l
发现卡在 openat /var/spool/cron/root
,看着像是安全软件,问了客户说他们没有安装过。
然后 top 找了一圈进程列表,发现有个 vsep
进程不是我们的,看看是不是 rpm 的:
1 | $ rpm -qf /usr/sbin/vsep |
然后也卡住,开个 ssh 后发现 rpm 也调用了 openat /etc/resolv.conf
:
1 | $ strace rpm -qf /usr/sbin/vsep |
然后其他正常机器上查看了下:
1 | $ rpm -qf /usr/sbin/vsep |
pstree -sp <vsep_pid>
后发现 systemd 纳管的 vsepd 服务,手动停止它,发现停止不掉后就kill了:
1 | $ systemctl stop vsepd |
发现都正常了。
vmware-nsx-gi-file
搜了下,vmware NSX 瘦代理 文档说它是一个防病毒的 agent。
文档 Troubleshooting NSX Guest 说了它会在内核拦截文件事件,以及搜索到红帽文章 fanotify 代码中阻塞的任务,系统挂起 里说到 vsep 会导致虚机挂起的问题
后续
让客户卸载掉一批机器上的它后重启,做对照组和其他没卸载的机器一起观察。