调试 Docker 守护进程的间歇性崩溃

调试 Docker 守护进程的间歇性崩溃

我在 AWS 中的一堆主机上运行 Docker,作为 ECS 集群的一部分,在过去几周内,Docker 守护进程开始间歇性崩溃。我没有在系统级别(内核、操作系统、Docker 等)进行任何更改,总体工作负载是相同的。

系统将正常运行数天,对 CPU、内存或 IO 没有任何明显压力。在某些时候,dockerd-default进程崩溃并且负载飙升至> 100,因为(我相信)进程被阻塞。我无法从中恢复,我唯一的选择是终止该实例。

性能图表显示负载飙升至 > 100

在守护进程崩溃时, dmesg表明内核无法调度该进程:

Apr 11 13:46:06 ip-172-31-84-92 kernel: [1356823.587223] INFO: task dockerd-default:1548 blocked for more than 120 seconds.

ps显示进程处于以下Dsl状态:

1055 ?  Dsl  5684:45 /usr/bin/dockerd-default --bip=10.192.0.1/16 --fixed-cidr=10.192.0.0/16 --group=docker --pidfile=/var/run/docke.pid --storage-driver=overlay --raw-logs

我已经lsof对这个过程进行了测试,试图找出什么文件句柄可以阻止所有内容,但没有什么是显而易见的。此外,没有太多磁盘 IO,所以我认为从这个角度来看我不会受到限制。

所以,这是我的问题:

  • 有人遇到过类似的事情吗?
  • 有什么方法可以在不终止实例的情况下恢复?
  • 对于调试的后续步骤有什么建议吗?

作为参考,以下是各个组件的版本:

Ubuntu:14.04.5 LTS
内核:4.14.12-041412-generic
Docker:18.06.1-ce

相关内容