자바 스 레 드 덤 프 를 가 져 오 는 일반적인 방법(추천)

1.스 레 드 덤 프 안내
스 레 드 덤 프(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 jconsole
    jconsole 도구 도 스 레 드 스 택 추적 을 볼 수 있 습 니 다.
    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대상 을 얻 습 니 다.
    방법의 불 파라미터ThreadMxBeanlockedMonitors는 가지 고 있 는 동기 화 장치 와 관 로 를 내 보 낼 지 여 부 를 나타 낸다.
    5.총화
    우 리 는 구체 적 인 예 시 를 통 해 스 레 드 덤 프 를 얻 는 여러 가지 방법 을 보 여 주 었 다.
    먼저 각종 JDK 내장 도 구 를 소개 합 니 다.
    그리고 명령 행 방식 에 대해 논 의 했 습 니 다.
    마지막 으로 JMX 프로 그래 밍 방식 을 소개 했다.
    완전한 예제 코드 는 참고 하 시기 바 랍 니 다GitHub 창고.
    자바 스 레 드 덤 프 를 얻 는 데 자주 사용 되 는 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 스 레 드 덤 프 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 우 리 를 많이 지지 해 주시 기 바 랍 니 다!

    좋은 웹페이지 즐겨찾기