편안한 휴식 시간을 지켜줄 안정적인 백엔드 운영과 개발 기법
자동 재시작(self healing)
Garbage Collection Death Spiral 원인
- 제한이 없는 요청 응답 레코드 수
- 해제되지 않는 객체 참조
- static class 변수 혹은 싱글턴 패턴의 class 변수에 과도한 데이터 적재
장해 해결 작업의 무한루프
- 장애 발생
- 장애 발생 전파
- 관제 시스템, 모니터링 툴 확인
- CPU, Memory, Disk 등 리소스 확인
- Network 확인
- 로그 확인
- OutOfMemoryError 체크
- 주요 서비스 (restClient, redis Client, datasource) 체크
- 힙덤프, 스레드 덤프 남기기
- 일단 서버 재시작
- 장애 해소 전파
위에서 현재 내가 경험하지 못한 상황은 모니터링 툴, 힙덤프, 스레드 덤프 남긴다는 것이 있다.
#!/usr/bin/env bash
java -Xmx10m \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:+ExitOnOutOfMemoryError \
-jar app.jar
k8s livenessProbe
- 서비스가 정상적으로 동작하는지 확인하는 방법
- 서비스가 정상적으로 동작하지 않을 때, 재시작을 수행하는 방법
자동 재시작은 위험 관리에 가장 중요한 부분이다. 위험 대응에서 가장 위험한 부분은 위험한 상황을 유발한 것보다는 그 상황에서 후속 조치를 취할 때 긴장을 한다는 것이다.
이에 따라 위험 대응에서 가장 중요한 것은 반복된 패턴은 자동화를 지향하는 것이다.