멈춤, 헛바쁨, 밀림은 서로 다른 장애다

증상이 비슷해도 CPU 사용률, 진행 여부, 피해 범위를 나누면 데드락과 주변 상태를 빠르게 구분할 수 있다.

deadlock

완전히 멈춤

서로 보유한 자원을 기다리며 CPU 사용률이 낮고 스택은 lock 대기 지점에 머문다.

CPU
낮음
전체 진행
없음
피해
대기 고리
livelock

계속 움직이지만 진전 없음

양보와 재시도를 반복해 로그와 CPU는 바쁘지만 완료 상태에 도달하지 못한다.

CPU
높음
전체 진행
없음
피해
재시도 집합
starvation

일부 작업만 계속 밀림

시스템 전체는 진행하지만 특정 스레드나 요청이 자원을 오래 받지 못한다.

CPU
정상
전체 진행
있음
피해
특정 작업

락 순서 점검

데드락은 대기 그래프와 스레드 덤프에서 순환 대기 여부를 먼저 확인한다.

랜덤 백오프

라이브락은 같은 타이밍의 양보가 반복되지 않도록 지연 시간을 흔든다.

공정성 정책

기아는 우선순위 노화, FIFO 큐, writer 우선 같은 스케줄링 규칙으로 줄인다.