Skip to main content

편안한 휴식 시간을 지켜줄 안정적인 백엔드 운영과 개발 기법

자동 재시작(self healing)

Garbage Collection Death Spiral 원인

  • 제한이 없는 요청 응답 레코드 수
  • 해제되지 않는 객체 참조
  • static class 변수 혹은 싱글턴 패턴의 class 변수에 과도한 데이터 적재

장해 해결 작업의 무한루프

  1. 장애 발생
  2. 장애 발생 전파
  3. 관제 시스템, 모니터링 툴 확인
    1. CPU, Memory, Disk 등 리소스 확인
    2. Network 확인
  4. 로그 확인
    1. OutOfMemoryError 체크
    2. 주요 서비스 (restClient, redis Client, datasource) 체크
  5. 힙덤프, 스레드 덤프 남기기
  6. 일단 서버 재시작
  7. 장애 해소 전파

위에서 현재 내가 경험하지 못한 상황은 모니터링 툴, 힙덤프, 스레드 덤프 남긴다는 것이 있다.

#!/usr/bin/env bash

java -Xmx10m \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:+ExitOnOutOfMemoryError \
-jar app.jar

k8s livenessProbe

  • 서비스가 정상적으로 동작하는지 확인하는 방법
  • 서비스가 정상적으로 동작하지 않을 때, 재시작을 수행하는 방법

자동 재시작은 위험 관리에 가장 중요한 부분이다. 위험 대응에서 가장 위험한 부분은 위험한 상황을 유발한 것보다는 그 상황에서 후속 조치를 취할 때 긴장을 한다는 것이다.

이에 따라 위험 대응에서 가장 중요한 것은 반복된 패턴은 자동화를 지향하는 것이다.

링크

[NHN FORWARD 22] 편안한 휴식 시간을 지켜줄 안정적인 백엔드 운영과 개발 기법