서비스가 죽으면 systemd가 다시 올려 줍니다. 편리하지만, 그 덕분에 문제가 무엇인지 모른 채 몇 달이 지나기도 합니다.
문제
재시작이 반복되면 서비스는 살아 있는 것처럼 보이지만 사용자는 간헐적으로 오류를 겪습니다.
- 하루에 몇 번씩 응답이 끊기는데 상태는 정상으로 표시
- 재시작 횟수 제한에 걸려 어느 순간 아예 멈춤
- 메모리 누수가 가려져 원인을 몰라보게 됨
- 장애 시각과 로그의 시각이 안 맞음
원인
재시작은 증상을 가릴 뿐 원인을 없애지 않기 때문입니다. 보통 자원 한계나 의존 서비스 문제입니다.
- 메모리 사용량이 한계를 넘어 강제 종료됨
- 의존하는 데이터베이스나 마운트가 늦게 준비됨
- 파일 디스크립터 한도가 부족
해결책
재시작 정책을 손보기 전에 종료 시점의 로그를 먼저 봅니다.
- 서비스가 죽은 시각을 기준으로 앱 로그와 시스템 로그를 같이 확인
- 종료 사유와 종료 코드를 기록
- 메모리 상한에 걸렸는지 자원 제한 설정을 확인
- 의존 관계를 명시해 시작 순서를 고정
- 재시작 간격을 둘려 로그가 남을 시간을 확보
- 재시작이 발생하면 알림이 오도록 모니터링에 항목 추가
현장에서 확인할 것
- 최근 7일간 재시작 횟수
- 종료 직전 로그에 남은 메시지
- 자원 제한 설정과 실제 사용량
- 의존 서비스의 기동 순서
자동 재시작은 시간을 벌어주는 장치이지 해결책이 아닙니다.
