반응형
쓰레드 덤프를 추출해보면 좋을 상황
- 서비스 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
반응형
'Dev > Linux' 카테고리의 다른 글
[Linux] Nginx를 이용해 SpringBoot Application을 80 port로 프록시 (0) | 2020.06.06 |
---|---|
[Linux] 기본 명령어 정리(옵션) + 기타 (1) | 2018.03.27 |