장애 대응 (jstack·jmap·OOM killer·FD)
장애 대응 — 응답이 없거나 느릴 때 jstack·jmap·jstat 으로 원인을 찾고, OOM killer 와 파일 디스크립터를 확인하기
"서버가 느려요", "앱이 죽었어요" 를 받았을 때 처음 10분에 무엇을 보는지 순서로 배웁니다. 스레드 덤프로 CPU 와 잠금을 읽고, 힙 히스토그램과 덤프로 메모리를 보고, 커널 OOM killer 와 파일 디스크립터 한도를 확인합니다.
1. 왜 배우는가
장애는 재시작하면 대개 사라집니다. 그래서 원인을 모른 채 반복됩니다. 재시작 전에 스레드 덤프 세 장과 힙 히스토그램 하나를 남기면 원인의 80% 는 그 안에 있습니다. 이 레슨은 그 "재시작 전 5분" 의 순서입니다.
자바 장애는 크게 넷입니다. CPU 를 다 쓰는 스레드, 잠금을 기다리는 스레드, 힙이 차서 GC 만 도는 상태, 파일 디스크립터 고갈입니다. 각각 보는 도구가 정해져 있고 JDK 에 모두 들어 있습니다.
커널이 JVM 을 죽이는 OOM killer 는 자바 로그에 아무것도 남기지 않습니다. dmesg 와 종료 코드 137 만이 증거입니다. 이 레슨의 스크립트는 JDK 21 로 문제 상황을 재현해 도구 출력을 실제로 확인했고, top -H·/proc·dmesg 는 리눅스 전용이라 명령을 정리했습니다.