이 기사의 내용은 JDK의 자체 jmap 및 jhat을 사용하여 Java 프로세스의 실행 상태를 모니터링하는 방법에 대한 것입니다. 필요한 친구가 참고할 수 있기를 바랍니다.
Java 프로세스 실행을 위해 JDK에는 Java 개발자가 프로세스 내에서 생성된 개체 인스턴스 수, 소비되는 메모리 양 등 실행 중인 프로세스의 다양한 상태를 모니터링할 수 있는 많은 도구가 제공됩니다.
이 글은 JDK1.8을 기준으로 작성되었습니다.
아래에는 5초마다 카운터 값을 증가시키는 무한 루프가 포함된 가장 간단한 Java 클래스를 작성했습니다.
package jmap; class Tool{ private int count = 0; public void Run() throws InterruptedException{ while(true){ System.out.println("Hello: " + this.count++); Thread.sleep(5000); } } } public class JMapTest { public static void main(String[] args) throws InterruptedException { Tool tool = new Tool(); tool.Run(); } }
Eclipse에서 이 애플리케이션을 실행하세요.
다음은 jmap과 jhat을 사용하여 실행 중인 프로세스를 모니터링하는 방법을 설명합니다.
1. 먼저 이 Java 실행 프로세스의 ID를 가져옵니다: 15392. 프로세스 ID를 얻기 위해 Windows와 함께 제공되는 작업 관리자를 직접 사용했습니다.
2 다음 명령줄을 사용하세요.
jmap -dump:format=b,file=c:tempheapstatus.bin 15392
jmap은 JDK에서 제공하는 도구이며 bin 폴더에 있습니다. JDK 설치 디렉토리 .
명령줄을 실행하면 힙 덤프 파일인 headstatus.bin
3이 생성됩니다. 이제 다른 JDK 도구인 jhat를 사용하여 이 덤프 파일을 읽고 구문 분석할 수 있습니다. 명령줄을 사용하세요:
jhat c:tempheapstatus.bin
분석이 완료된 후 jhat에 의해 인쇄된 출력에는 스냅샷이 해결되었다는 메시지가 표시되며 이는 로컬 서버의 7000 포트에서 볼 수 있습니다.
http://localhost:7000에 접속하시면 jmap 파싱 결과를 보실 수 있습니다.
localhost:7000 in browser:
하이퍼링크 "jmap Tool"을 클릭하여 세부 정보를 입력하세요. 아래 그림은 내 도구 클래스 인스턴스 @0x7166babd8의 멤버 변수, 즉 카운터 값을 의미합니다. 49개까지 누적되었습니다.
4. 명령줄이 마음에 들지 않으면 jmap 및 jhat 명령과 동일한 기능을 완료할 수 있는 Eclipse 플러그인인 MAT – 메모리 분석 도구를 사용할 수도 있습니다.
이 플러그인을 설치하면 Eclipse에 추가 보기가 표시됩니다.
jmap에서 생성된 힙 덤프 파일을 MAT 보기로 직접 드래그하면 결과는 다음과 같습니다. 자동으로 구문 분석되어 표시됩니다.
"주소로 개체 찾기" 버튼을 클릭하세요:
또한 이전에 localhost:7000에서 본 개체 인스턴스의 세부 정보를 볼 수도 있습니다:
이전에 얻은 것과 동일한 결과를 얻을 수 있습니다.
위 내용은 JDK에 내장된 jmap 및 jhat을 사용하여 Java 프로세스의 실행 상태를 모니터링하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!