저는 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도 많지 않기 때문에 그런 측면에서 제한을 두지는 않을 것 같아요.
제 질문은 다음과 같습니다.
- 비슷한 일을 겪은 사람이 있습니까?
- 인스턴스를 종료하지 않고 복구할 수 있는 방법이 있나요?
- 디버깅의 다음 단계에 대한 제안 사항이 있습니까?
참고로 각 구성 요소의 버전은 다음과 같습니다.
우분투: 14.04.5 LTS
커널: 4.14.12-041412-generic
도커:18.06.1-ce