私はECSクラスタの一部としてAWSの複数のホストでDockerを実行していますが、過去数週間でDockerデーモンが断続的にクラッシュし始めました。システムレベル(カーネル、OS、Dockerなど)では何も変更せず、全体の作業量は同じです。
システムは、CPU、メモリ、またはIOに重大なストレスを与えずに数日間正常に動作します。ある時点でdockerd-default
プロセスが中断され、負荷が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
ドッカー:18.06.1-ce