시스템에 발생한 원인을 찾을 때 지식도 탄탄해야하지만 데이터를 근거로 원인 파악을 할 수 있어야한다. 이 때 말하는 데이터는 예외 스택, 가상 머신 운영 로그, GC 로그, 스레드 덤프, 힙 덤프 등을 모두 포괄한다. 이를 뽑아 낼 수 있는 도구를 알아보자.
책에서 여러가지 분석 도구가 나오긴하는데 전부 jcmd로 처리할 수 있음
힙 덤프는 JVM 힙 메모리의 전체 스냅샷을 파일로 떠서 저장하는 행위이다. 즉, JVM 안의 모든 객체(Heap 영역)를 스캔해서 어떤 객체가 살아있는지, 각 객체의 참조 관계가 무엇인지를 한 시점에서 완전히 고정된 상태로 저장해야한다. 이걸 하려면 GC가 동작 중이거나 객체가 변하면 안된다.
그래서 JVM은 힙덤프를 뜨기 전에 내부적으로 이렇게 동작한다.
<aside> 💡
STW 동안 요청 처리가 완전히 멈추기 때문에 API 요청, DB 쿼리, Kafka 컨슈밍 등 모든 작업이 중단된다.