3일 내내 붙잡고 있다가 결국 원인 찾아서 정리해봅니다. 회사 서비스가 하루에 한 번씩 죽길래 로그 뒤지다가, 메모리 그래프 찍어보니 새벽 3시쯤 급격히 늘어나더라고요.
원인은 로그 수집 컨테이너였습니다. Elasticsearch로 로그를 보내는데, 예외 발생 시 스택 트레이스가 아주 길면 인덱싱 실패가 반복되면서 버퍼가 계속 쌓이더군요. 버퍼 크기 제한도 안 걸려 있어서 메모리 2GB까지 점유하고 컨테이너가 죽었습니다.
해결 방법은 간단했어요.
- 로그 메시지 최대 길이를 10KB로 자르기
- 백프레셔가 걸리면 드랍하도록 버퍼 설정 변경
이걸로 안 죽습니다. 혹시 비슷한 증상 있으면 로그 파이프라인부터 보세요.