容器报错:rpc error: code = 14 desc = grpc: the connection is unavailable

开发同学反馈某一个开发环境的机器卡的要命,我登录一看,内存已经被耗的差不多,但是一看top又看不出来哪个进程占用了很多的内存,如图:
akb48

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -nrk5看也没看出来个之乎者也。

发现这个服务器里有两个容器,但是很奇怪,用docker stats却无法获得他们的基础值:
akb48

明明容器都是up状态啊,于是我就尝试链接到其中一台,发现报错:rpc error: code = 14 desc = grpc: the connection is unavailable,而且不能restart和kill,如图:
akb48

使用docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc --debug,发现里面是这样:
akb48

后来在https://github.com/moby/moby/issues/30984 这个文章下面找到了一个跟我情况差不多的哥们,也是docker stats命令失效。解决方法是重启docker进程:systemctl restart docker.service,果然,重启之后在手动启动上面两个容器,容器就可以正常访问了:
akb48

服务器的内存情况也得到了一定的缓解:
akb48

后来跟开发复盘,原来是这个机器上一次死机了,没法关闭容器,只能直接在阿里云控制台重启,而正常的流程应该是先关闭容器再重启的。
akb48

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------