자바 스 레 드 덤 프 를 가 져 오 는 일반적인 방법(추천)
스 레 드 덤 프(Thread Dump)는 JVM 의 모든 스 레 드 상태 정 보 를 스냅 샷 으로 저장 합 니 다.
스 레 드 덤 프 는 일반적으로 텍스트 형식 을 사용 하여 텍스트 파일 에 저장 한 다음 에 인공 적 으로 보고 분석 하거나 도구/API 를 사용 하여 자동 으로 분석 할 수 있 습 니 다.
자바 의 스 레 드 모델 은 운영 체제 의 스 레 드 스 케 쥴 링 모델 을 직접 사용 하여 간단 한 패키지 만 진행 합 니 다.
스 레 드 호출 스 택 은 방법 호출 스 택 이 라 고도 합 니 다.예 를 들 어 프로그램 을 실행 하 는 과정 에서 일련의 방법 으로 체인 을 호출 했다.
obj1.method2
호출obj2.methodB
,obj2.methodB
또 호출obj3.methodC
.모든 스 레 드 의 상 태 는 이러한 호출 스 택 을 통 해 표시 할 수 있다.스 레 드 덤 프 는 각 스 레 드 의 행 위 를 보 여 주 었 고 진단 과 검사 문제 에 매우 유용 하 다.
다음은 자바 스 레 드 덤 프 를 가 져 오 는 다양한 도구 와 사용 방법 을 구체 적 인 예 시 를 통 해 보 여 드 리 겠 습 니 다.
2.JDK 가 가지 고 있 는 도구 사용
우 리 는 일반적으로 JDK 가 가지 고 있 는 명령 행 도 구 를 사용 하여 자바 프로그램의 스 레 드 덤 프 를 가 져 옵 니 다.이 도구 들 은 모두 JDK 홈 디 렉 터 리 의 bin 폴 더 아래 에 있 습 니 다.
그래서 PATH 경 로 를 설정 하면 됩 니 다.설정 하지 않 으 면 참고 할 수 있 습 니 다:JDK 환경 준비
2.1 jstack 도구
jstack 는 JDK 에 내 장 된 명령 행 도구 로 스 레 드 상 태 를 볼 수 있 고 스 레 드 덤 프 를 실행 할 수 있 습 니 다.
일반적으로
jps
또는ps
명령 을 통 해 자바 프로 세 스에 대응 하 는 pid 를 찾 은 다음 콘 솔 에서 pid 를 통 해 스 레 드 덤 프 를 출력 합 니 다.물론 출력 내용 을 파일 로 바 꿀 수도 있 습 니 다.jstack 도 구 를 사용 하여 스 레 드 덤 프 를 가 져 오 는 기본 매개 변수 형식 은:
jstack [-F] [-l] [-m] <pid>
다음은 구체 적 인 시연 을 보십시오.
# 1.
jstack -help
출력의 내용 은 다음 과 유사 합 니 다:
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message
대응 하 는 매개 변수 옵션 은 선택 할 수 있 습 니 다.구체 적 인 의 미 는 다음 과 같다.-F
옵션 을 선택 하여 스 레 드 덤 프 를 강제 집행 합 니 다.가끔jstack pid
가사 할 때-F
표지-l
옵션 을 선택 하면 메모리 에 있 는 동기 화 장치 와 자원 잠 금-m
옵션,native 스 택 프레임(C 와 C+의)예 를 들 어 스 레 드 덤 프 를 가 져 와 결 과 를 파일 로 출력 합 니 다.
jstack -F 17264 > /tmp/threaddump.txt
jps
명령 을 사용 하면 로 컬 자바 프로 세 스 의 pid 를 가 져 올 수 있 습 니 다.2.2 Java Mission Control
자바 미 션 컨트롤(JMC)은 클 라 이언 트 그래 픽 인터페이스 도구 로 자바 응용 프로그램의 각종 데 이 터 를 수집 하고 분석 하 는 데 사용 된다.
JMC 를 시작 하면 로 컬 컴퓨터 에서 실행 중인 자바 프로 세 스 목록 이 먼저 표 시 됩 니 다.물론 JMC 를 통 해 원 격 자바 프로 세 스에 연결 할 수도 있다.
해당 프로 세 스 를 마우스 우 클릭 으로 클릭 하고'Start Flight Recording(비행 기록 시작)'을 선택 할 수 있 습 니 다.끝 난 후에"Threads(스 레 드)"옵션 은"스 레 드 덤 프"를 표시 합 니 다.
2.3 jvisualvm
jvisualvm 은 클 라 이언 트 그래 픽 인터페이스 도구 로 간단 하면 서도 실 용적 이 며 자바 응용 프로그램 을 감시 하고 JVM 에 대해 고장 검사 와 성능 분석 을 할 수 있 습 니 다.
스 레 드 덤 프 를 가 져 올 수도 있 습 니 다.자바 프로 세 스 를 마우스 오른쪽 단추 로 누 르 고"Thread Dump"옵션 을 선택 하면 스 레 드 덤 프 를 만 들 수 있 습 니 다.완료 되면 새 옵션 에서 자동 으로 열 립 니 다.
2.4 jcmd
jcmd 도 구 는 본질 적 으로 대상 JVM 에 명령 을 보 냅 니 다.많은 기능 을 지원 하지만 원 격 JVM 연결 은 지원 되 지 않 습 니 다.-자바 프로 세 스 의 로 컬 기기 에서 만 사용 할 수 있 습 니 다.
그 중 하 나 는
Thread.print
스 레 드 덤 프 를 가 져 오 는 명령 입 니 다.예제 용법 은 다음 과 같 습 니 다.
jcmd 17264 Thread.print
2.5 jconsolejconsole 도구 도 스 레 드 스 택 추적 을 볼 수 있 습 니 다.
jconsole 을 열 고 실행 중인 자바 프로 세 스 에 연결 합 니 다."스 레 드"옵션 으로 탐색 하면 모든 스 레 드 의 스 택 추적 을 볼 수 있 습 니 다.
2.6 소결
JDK 의 많은 도 구 를 사용 하여 스 레 드 덤 프 를 얻 을 수 있다 는 사실 이 증명 되 었 다.우 리 는 그들의 장단 점 을 돌 이 켜 보고 정리 합 시다.
jstack
jmc
jvisualvm
jcmd
jconsole
3.Linux 명령 사용기업 애플 리 케 이 션 서버 에 서 는 보안 상의 이유 로 JRE 만 설 치 된 것 으로 보인다.이 럴 때 는 이런 JDK 에 내 장 된 도 구 를 사용 할 수 없다.
그래도 스 레 드 덤 프 를 얻 을 방법 이 있 습 니 다.
3.1 사용
kill -3
명령유 닉 스/리 눅 스 같은 시스템 에 서 는
kill
명령 으로 스 레 드 덤 프 를 가 져 올 수 있 으 며,바 텀 실현 원 리 는 시스템 호출kill()
을 통 해 신호 파 라 메 터 를 프로 세 스에 보 낼 수 있다.여기 서 보 내야 할 것 은-3
신호 다.일반적으로
jps
를 통 해 JAVA 프로 세 스에 대응 하 는 pid 를 찾 습 니 다.kill -3
사용 예 는 다음 과 같 습 니 다.
kill -3 17264
3.2 Ctrl + Break
(Windows)Windows 운영 체제 의 명령 행 창 에서 조합 키
Ctrl + Break
를 사용 하여 스 레 드 덤 프 를 가 져 올 수 있 습 니 다.물론 자바 프로그램 을 시작 하 는 콘 솔 창 으로 탐색 한 다음CTRL
키 와Break
키 를 동시에 눌 러 야 한다.주의해 야 할 것 은 일부 키보드 에는'
Break
'키 가 없다 는 것 이다.이 경우 조합 해서 사용
CTRL
,SHIFT
,그리고Pause
키 를 사용 할 수 있다.이 두 명령 은 모두 스 레 드 덤 프 를 콘 솔 에 인쇄 할 수 있다.
4.프로 그래 밍 을 통 해 ThreadMxBean 사용
JMX 기술 은 다양한 플 라 워 조작 을 지원 한다.
ThreadMxBean
를 통 해 스 레 드 덤 프 를 실행 할 수 있 습 니 다.예제 코드 는 다음 과 같다.
private static String threadDump(boolean lockedMonitors, boolean lockedSynchronizers) {
StringBuffer threadDump = new StringBuffer(System.lineSeparator());
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
for(ThreadInfo threadInfo : threadMXBean.dumpAllThreads(lockedMonitors, lockedSynchronizers)) {
threadDump.append(threadInfo.toString());
}
return threadDump.toString();
}
위의 코드 가 하 는 일 은 매우 간단 하 므 로 먼저ManagementFactory
대상 을 얻 습 니 다.방법의 불 파라미터
ThreadMxBean
와lockedMonitors
는 가지 고 있 는 동기 화 장치 와 관 로 를 내 보 낼 지 여 부 를 나타 낸다.5.총화
우 리 는 구체 적 인 예 시 를 통 해 스 레 드 덤 프 를 얻 는 여러 가지 방법 을 보 여 주 었 다.
먼저 각종 JDK 내장 도 구 를 소개 합 니 다.
그리고 명령 행 방식 에 대해 논 의 했 습 니 다.
마지막 으로 JMX 프로 그래 밍 방식 을 소개 했다.
완전한 예제 코드 는 참고 하 시기 바 랍 니 다GitHub 창고.
자바 스 레 드 덤 프 를 얻 는 데 자주 사용 되 는 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 스 레 드 덤 프 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 우 리 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.