Dev/Linux

[LINUX] JVM에서 thread dump 가져오기

kyeoneee 2020. 5. 19. 21:25
반응형

쓰레드 덤프를 추출해보면 좋을 상황

  • 서비스 OOM 장애 발생 시
  • 기대보다 웹 어플리케이션이 느리게 동작할 때
  • 사용자 수가 많지 않은데 CPU사용량이 높을때
  • 간헐적으로 응답이 느릴때
  • 서비스 실행시간이 길어질수록 응답시간이나 cpu 사용량이 늘어날 때
  • 등등..

쓰레드 덤프는 획득하는 순간의 쓰레드 상태만 알 수 있기 때문에 쓰레드 상태 변화를 확인하기 위해서는 일정 시간 주기로 여러번의 쓰레드 덤프를 추출하여 확인하는 것이 좋다.

 

쓰레드 덤프를 추출하는 방법

원하는 시점에 커널에서 추출하는 방법과 Java 어플리케이션 실행 시 OOM이 발생하면 쓰레드 덤프를 남길 수 있도록 JVM 옵션을 설정하는 방법이 있다.

  • 원하는 시점에 커널을 이용해 추출하는 방법
OS 단에서
    리눅스 : kill -3 [PID]
    
java단에서 
    jps -v 로 java 프로세스 확인
    - jstack [PID] (jstack으로 반응이 없는 경우 –F 옵션)
    - jcmd [PID] Thread.print (jdk7 이후 등장)
        jcmd [PID] help 로 명령어 확인 가능, 직관적임
  • OOM 발생 시 원하는 경로에 Thread dump 저장하는 Java Application 실행 옵션
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${path/to/save/thread/dump/file}

 

쓰레드 덤프 읽기

스레드 덤프를 그대로 읽기는 어렵다.
스레드 덤프를 파일로 저장하여 시각화 시켜주는 사이트를 사용하는 것이 더욱 용이
e.g.) JVM Thread dump analyzer - Universal Java Thread dump analysis

반응형