도커 OOM Kill
도커 컨테이너 OOM Kill 원인 추적
도커로 바른을 띄웠는데 컨테이너가 OOM Kill로 죽나요? 대개는 컨테이너 메모리 한계가 모델·사전
로딩에 필요한 양보다 낮게 잡혀 있어서입니다. 원인을 추적해봐요.
증상
- 컨테이너가 기동 중 또는 기동 직후 OOM(Out Of Memory)으로 종료됩니다.
docker상태에서OOMKilled로 표시됩니다.- 맞춤법 검사 기능이 포함된 이미지에서 더 자주 발생합니다.
원인
바른은 기동 시 모델과 사전을 메모리에 미리 올립니다. 컨테이너 메모리 한계가 이 로딩 양보다
낮으면, 로딩 도중 커널이 프로세스를 강제 종료(OOM Kill)합니다.
| 원인 | 설명 |
|---|---|
| 메모리 한계 부족 | 컨테이너 --memory 한계가 너무 낮음 |
| 교정 사전 적재 | 맞춤법 검사 이미지가 우리말샘·온용어·word-freq.gob·BK-tree까지 올림 |
| 동시 부하 | 다른 컨테이너와 메모리를 다툼 |
특히 맞춤법 검사 이미지는 형태소 분석 전용보다 사전을 많이 적재하므로 메모리가 더 필요합니다. 자세한 내역은 메모리 사용량 증가 원인 찾기 문서를 보세요.
해결
-
메모리 한계를 넉넉히 잡으세요. 컨테이너 메모리 한계가 모델·사전 로딩에 필요한 양보다 커야 합니다. 한계를 올린 뒤 기동되는지 확인하세요.
수치는 환경에 맞게 조정하세요
위
4g는 예시입니다. 사용하는 이미지가 형태소 분석 전용인지 교정 빌드인지에 따라 필요 메모리가 다릅니다. 실제 기동 시 메모리 사용량을 보고 여유 있게 잡으세요. -
이미지 종류를 확인하세요. 형태소 분석만 필요하면 교정 사전을 적재하지 않는 이미지가 메모리를 덜 씁니다. 교정 기능이 꼭 필요한지 점검하세요.
-
기동 로그로 어디서 죽는지 보세요. 모델 로딩 중 종료되는지, 사전 로딩 중인지 확인하면 필요 메모리를 가늠하는 데 도움이 됩니다.
-
호스트 자원을 확인하세요. 여러 컨테이너가 한 호스트에서 메모리를 다투면 OOM이 납니다. 호스트 전체 가용 메모리와 다른 워크로드도 함께 보세요.
예방·팁
- 운영 투입 전, 실제 사용할 이미지로 한 번 기동해 안정 시점의 메모리 사용량을 측정하고 그보다 여유 있게 한계를 설정하세요.
- 기동 직후 메모리가 한 번 크게 오르는 것은 모델·사전을 미리 올리는 정상 동작이므로, 그 피크를 견딜 수 있게 한계를 잡아야 합니다.
자주 묻는 질문
Q. 컨테이너가 OOM Kill로 죽어요. 가장 흔한 원인은?
컨테이너 메모리 한계가 모델·사전 로딩에 필요한 양보다 낮게 설정된 경우입니다. 바른은 기동 시
모델과 사전을 메모리에 미리 올리므로, 그 피크를 견딜 만큼 한계를 키워야 합니다.
Q. 교정 이미지에서 OOM이 더 자주 나는 이유는?
맞춤법 검사 이미지는 우리말샘·온용어 사전, 단어 빈도(word-freq.gob), 유사어 검색용 BK-tree까지
적재하기 때문에 형태소 분석 전용 이미지보다 메모리가 더 필요합니다.
Q. --memory는 얼마로 잡아야 하나요?
정해진 값은 없어요. 형태소 분석 전용인지 교정 빌드인지에 따라 필요 메모리가 다르기 때문입니다.
실제 사용할 이미지로 한 번 기동해 안정 시점의 메모리 사용량을 측정하고, 기동 직후의 로딩 피크까지
견딜 만큼 여유 있게 잡으세요. 예시의 4g는 그대로 쓰는 값이 아니라 시작점일 뿐입니다.
Q. 어느 단계에서 죽는지 어떻게 알 수 있나요?
기동 로그를 보면 모델 로딩 중인지 사전 로딩 중인지 확인할 수 있어요. 어디서 종료되는지 알면 필요 메모리를 가늠하는 데 도움이 됩니다. 여러 컨테이너가 한 호스트에서 메모리를 다투는 경우도 있으니 호스트 전체 가용 메모리도 함께 점검하세요.
도움이 되었나요?