스레드 덤프는 CPU 피크, 교착 상태, 메모리 예외, 느린 응용 프로그램 응답, 긴 응답 시간 및 기타 시스템 문제를 결정하는 데 도움이 될 수 있습니다. http://fastthread.io/와 같은 일부 온라인 분석 도구는 문제를 분석하고 찾는 데 도움이 될 수 있지만 이러한 도구에는 덤프 파일이 필요합니다. 따라서이 기사에서는 7에서 Java 스레드 덤프 파일을 잡는 방법을 요약했습니다.
1. Jstack
Jstack은 스레드 덤프 파일을 크롤링하기위한 효과적인 명령 줄 도구입니다. JDK 디렉토리의 빈 폴더 (JDK_HOME/BIN)에 있습니다. 다음은 덤프 파일을 크롤링하는 명령입니다.
jstack -l <pid>> <file -path>
설명 :
PID : Java 응용 프로그램의 프로세스 ID, 즉 덤프 파일을 크롤링 해야하는 응용 프로그램 프로세스 ID입니다.
파일 경로 : 덤프 파일을 저장하는 경로.
예:
jstack -l 37320> /opt/tmp/threaddump.txt
위의 예는 jstack을 사용하여/opt/tmp/threaddump.txt 디렉토리에 덤프 파일을 생성합니다.
Java5에서 시작하여 JSTACK은 JDK에 포함되었습니다. 이전 버전의 JDK를 사용하는 경우 다른 방법을 사용해야합니다.
2. 킬 -3
보안 고려 사항 측면에서 생산 환경의 일부 기계에는 JRE 환경 만 포함되므로 JSTACK 도구를 사용할 수 없습니다. 이 경우 킬 -3을 사용할 수 있습니다.
kill -3 <pid>
설명 :
PID : Java 응용 프로그램의 프로세스 ID, 즉 덤프 파일을 크롤링 해야하는 응용 프로그램 프로세스 ID입니다.
예:
kill -3 37320
킬 -3을 사용하여 덤프 파일을 생성 할 때 덤프 파일은 표준 오류 스트림으로 출력됩니다. 응용 프로그램이 Tomcat에서 실행중인 경우 덤프 내용이 <Tomcat_Home> /logs/catalina.out 파일로 전송됩니다.
3. jvisualvm
Java VisualVM은 JVM 정보를 제공 할 수있는 그래픽 인터페이스 도구입니다. JDK_HOME/BIN/JVISUALVM.EXE 파일에 있습니다. JDK6 Update7부터 JDK에 포함되어 있습니다.
jvisualvm을 실행하고 왼쪽 패널 (아래 그림과 같이)에서 실행중인 JVM 정보가 나열됩니다. 이 도구는 로컬 또는 원격 실행중인 JVM에서 덤프 파일을 가져올 수 있습니다.
위 그림의 프로세스 이름에 해당하는 스레드 덤프 버튼을 클릭하여 아래 그림과 같이 덤프 파일을 생성합니다.
4. JMC
JMC (Java Mission Control)는 지역 또는 생산 환경에서 데이터를 수집하고 분석 할 수있는 도구입니다. Oracle JDK 7 업데이트 40부터 시작하여 JDK에 포함되어 JVM에서 덤프 파일을 생성 할 수 있습니다. JMC는 jdk_home/bin/jmc.exe 파일에 있습니다.
도구를 실행 한 후에는 Java 프로세스가 로컬로 작동하는 것을 볼 수 있으며, 이는 원격 시스템에도 연결될 수도 있습니다. 덤프 파일을 생성하려는 Java 프로세스를 두 번 클릭하고 비행 레코더를 클릭하면 다음 대화 상자가 표시됩니다.
스레드 덤프 드롭 다운 상자에서 덤프 파일을 생성하기위한 시간 간격을 선택할 수 있습니다. 위의 예에서는 덤프 파일이 60 초마다 생성됩니다. 완료를 선택한 후 비행 레코더를 시작하면 스레드 패널에서 덤프 파일의 내용을 볼 수 있습니다.
5. Windows (Ctrl + Break)
이 방법은 Windows 운영 체제에서만 유효합니다.
콘솔 창에서 명령 줄을 선택하십시오
명령 줄 창에서 "ctrl + break"명령을 누릅니다.
덤프 파일이 생성되고 덤프 파일의 내용이 명령 줄 창에 인쇄됩니다.
참고 1 : "Break"키를 취소 한 몇 개의 노트북 (예 : Lenovo T 시리즈)이 있으며,이 경우 Break 키와 비슷한 기능을 갖는 키를 위해 Google에 있어야하며 "Function Key + B"키는 Break 키와 동일하다는 것을 알았으므로 "CTRL + FN + B"키를 사용하여 덤프 파일을 생성했습니다.
참고 2 : 위의 방법을 사용하는 것 중 하나는 덤프 파일의 내용이 콘솔에 인쇄된다는 것입니다. 덤프 파일이없는 경우 http://fasthread.io와 같은 분석 도구를 사용하여 덤프 파일을 분석하기가 어렵습니다. 따라서 다음 명령을 사용하여 덤프 파일의 내용을 텍스트 파일로 출력 할 수 있습니다. 예를 들어, 응용 프로그램 이름은 samplethreadprogram이므로 일반적인 명령은 다음과 같습니다.
java -classpath . SampleThreadProgram
덤프 파일의 내용을 텍스트 파일에 출력하라는 명령은 다음과 같습니다.
java -classpath . SampleThreadProgram > C:/workspace/threadDump.txt 2>&1
"ctrl + break"키를 누르면 덤프 파일이 c :/workspace/threaddump.txt에 저장됩니다.
6. ThreadMxBean
JDK 1.5로 시작하여 ThreadMxBean이 소개되었습니다. 이것은 JVM의 관리 인터페이스입니다. 이 인터페이스를 사용하면 덤프 파일을 생성하려면 소량의 코드 만 있으면됩니다. 다음은 덤프 파일을 생성하기 위해 ThreadMxBean을 사용하는 주요 구현입니다.
public void dumpThreadDump () {ThreadMxBean ThreadMxBean = manageFactory.getThreadMxBean (); for (threadInfo ti : threadmxbean.dumpallthreads (true, true)) {system.out.print (ti.toString ()); }}7. APM 도구 앱 역학
일부 애플리케이션 성능 모니터링 도구는 덤프 파일을 생성하는 기능을 제공합니다. App Dynamics를 사용하여 응용 프로그램을 모니터링하는 경우 다음은 덤프 파일을 생성하는 단계입니다.
액션 창출 창을 열고 진단을 선택하십시오-> 액션 창에서 스레드 덤프를 가져옵니다.
조치 이름, 크롤링 할 덤프 파일 수 및 크롤링 덤프 파일의 시간 간격 (밀리 초)을 입력하십시오.
크롤링 덤프 작업이 시작되기 전에 몇 가지 작업을 수행하려면이 조치 확인란 전에 승인 요구를 선택하고 개인 또는 그룹의 이메일 주소를 입력 할 수 있습니다.
확인을 클릭하십시오.
요약
덤프 파일을 일찍 가져 오는 7 가지 방법을 나열했지만 IMHO, Jstack 및 Kill -3은 다음과 같은 이유로 가장 좋은 선택입니다.
에이. 간단하고 구현하기 쉽습니다.
비. 일반 : 대부분의 경우 운영 체제 유형, Java 공급 업체, JVM 버전 등에 관계없이.