【问题现象】

1、上周五晚上出现Docker服务端的CPU较高问题,单核显示占用120%左右,内存正常;

2、自研进程,cpu内存占用都很小;

3、周一早上上班发现CPU回归正常,单核显示占用3%左右

【分析定位步骤】

1、由于周一早上上班之后,docker服务端的CPU恢复了正常,所以只能查看日志,尝试定位问题

2、查看docker服务日志,发现上周五下午16:25:33秒dockerd(docker服务)和kubelet(k8s节点的work进程)断连,周六早上10:57:24秒,被systemd自动拉起

journalctl -u docker.server -S "2019-12-13 16:25:30"

3、不知为何dockerd会被重启,直接查看查看系统日志/var/log/messages-20191215上下文

发现周六早上10:57:24秒的flanneld(网络规划服务)被systemd(Linux守护进程)认定为异常,systemd对kubelet、docker、flanneld进行了重启,从而整个系统恢复了正常,从上面的日志分析猜测是flanneld出现了未知异常,导致docker和kubelet网络异常,引起docker的cpu增高。

Flanneld异常的原因现在暂时未清楚,但是通过flanneld上面的日志,flanneld重启之前,控制器的服务一直在报挂载卷异常,所以猜测硬盘满了,导致了flanneld的异常,现在系统已经使用了572G,但当时只是分配了500G

【主要调试命令】

开启daemon的debug日志

可以在启动docker的时候加上-D参数,但是一般环境出现了问题我们不能重启,所以docker给我们想好了出现了问题应该怎么做:

在/var/docker/daemon.json中设置好

{

"debug": true

}

使用命令

sudo kill -SIGHUP $(pidof dockerd)

重新加载配置文件, docker开始打印debug日志

打印docker堆栈

$ kill -SIGUSR1 $(pidof dockerd)

上述命令是否生效,以及堆栈文件的生成位置,都可以在journalctl -u docker.service -f 查看到

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐