1. 들어가며


시스템에 발생한 원인을 찾을 때 지식도 탄탄해야하지만 데이터를 근거로 원인 파악을 할 수 있어야한다. 이 때 말하는 데이터는 예외 스택, 가상 머신 운영 로그, GC 로그, 스레드 덤프, 힙 덤프 등을 모두 포괄한다. 이를 뽑아 낼 수 있는 도구를 알아보자.

2. 기본적인 문제 해결 도구


책에서 여러가지 분석 도구가 나오긴하는데 전부 jcmd로 처리할 수 있음

3. 추가로 알아볼 것


힙덤프 뜰때는 왜 트래픽 빼야할까?

힙 덤프는 JVM 힙 메모리의 전체 스냅샷을 파일로 떠서 저장하는 행위이다. 즉, JVM 안의 모든 객체(Heap 영역)를 스캔해서 어떤 객체가 살아있는지, 각 객체의 참조 관계가 무엇인지를 한 시점에서 완전히 고정된 상태로 저장해야한다. 이걸 하려면 GC가 동작 중이거나 객체가 변하면 안된다.

그래서 JVM은 힙덤프를 뜨기 전에 내부적으로 이렇게 동작한다.

<aside> 💡

  1. 모든 스레드 중단 (STW)
  2. 루트 객체(GC Root)부터 전체 힙 그래프 탐색
  3. 객체 메타데이터, 필드, 참조 관계 직렬화
  4. 파일로 write (수백MB~수GB)
  5. 모든 스레드 재개 </aside>

STW 동안 요청 처리가 완전히 멈추기 때문에 API 요청, DB 쿼리, Kafka 컨슈밍 등 모든 작업이 중단된다.