zhangguanzhang's Blog

openat /etc/resolv.conf 卡住的一次排查

字数统计: 535阅读时长: 2 min
2023/12/01

一次 openat /etc/resolv.conf hung 排查过程

由来

客户环境机器经常卡死,tty 都进不去,这次卡死了大部分后能 ssh ,客户让我们远程上去查看

排查过程

信息

1
2
3
4
$ uname -a
$ Linux xxx 3.10.0-957.el7.x86_64 ....
$ cat /etc/readhat-release
CentOS Linux release 7.6.1810 (Core)

过程

先拉起业务的,发现 docker daemon 无法启动:

1
systemctl start docker

会一直卡住,stop 则会报错 operator timeout。然后 systemctl cat --no-pager docker 后使用 ExexStart 来前台启动也卡住:

1
dockerd --debug

然后 strace 下:

1
2
3
4
$ strace dockerd --debug
...
...
openat(AT_FDCWD, "/etc/resolv.conf", O_RDONLY|O_CLOEXEC

一直卡在这里,ctrl + c 都无法取消,再开个 ssh 上去 cat 发现卡住

1
2
3
$ ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 54 10月 14 14:20 /etc/resolv.conf
$ cat /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
2
3
4
$ strace rpm -qf /usr/sbin/vsep
...
...
openat(AT_FDCWD, "/etc/resolv.conf", O_RDONLY|O_CLOEXEC

然后其他正常机器上查看了下:

1
2
$ rpm -qf /usr/sbin/vsep
vmware-nsx-gi-file-6.4.5.13288473-1.rhel.x86_64.rpm

pstree -sp <vsep_pid> 后发现 systemd 纳管的 vsepd 服务,手动停止它,发现停止不掉后就kill了:

1
2
3
4
5
6
7
8
9
10
$ systemctl stop vsepd
^C
$ kill -9 xxxx
$ ps aux | grep vse[p]
.......... [vsep] <defunct>

$ cat /etc/resolv.conf
nameserver xxxx
$ crontab -l
xxxx

发现都正常了。

vmware-nsx-gi-file

搜了下,vmware NSX 瘦代理 文档说它是一个防病毒的 agent。
文档 Troubleshooting NSX Guest 说了它会在内核拦截文件事件,以及搜索到红帽文章 fanotify 代码中阻塞的任务,系统挂起 里说到 vsep 会导致虚机挂起的问题

后续

让客户卸载掉一批机器上的它后重启,做对照组和其他没卸载的机器一起观察。

参考

CATALOG
  1. 1. 由来
  2. 2. 排查过程
    1. 2.1. 信息
    2. 2.2. 过程
    3. 2.3. vmware-nsx-gi-file
    4. 2.4. 后续
  3. 3. 参考