머리말
이 기사는 주로 Java Virtual Machines의 결함 처리 도구를 소개합니다. 이 기사에 언급 된 이러한 도구에는 다음이 포함됩니다.
| 이름 | 주요 기능 |
| JPS | JVM 프로세스 상태 도구는 지정된 시스템에 모든 핫스팟 가상 머신 프로세스를 표시합니다. 일반적으로 로컬 호스트 |
| JSTAT | JVM 통계 모니터링 도구, 핫스팟 가상 머신의 모든 측면에 대한 운영 데이터를 수집하는 데 사용됩니다. |
| 진포 | Java의 구성 정보, 가상 머신 구성 정보 표시 |
| JMAP | Java의 메모리 맵은 가상 머신의 메모리 스토리지 스냅 샷을 생성합니다 (HeapDump 파일) |
| jhat | JVM 힙 덤프 브라우저는 힙 파일을 분석하는 데 사용됩니다. HTTP/HTML 서버를 설정하여 사용자가 브라우저에서 분석 결과를 볼 수 있습니다. |
| Jstack | Java 용 스택 추적, 가상 머신의 스레드 스냅 샷을 표시합니다. |
JPS : 가상 기계 프로세스 상태 도구
JPS의 기능은 UNIX/LIUNX의 PS 명령과 유사합니다. 실행중인 가상 머신 프로세스를 인쇄하고 가상 머신 실행 메인 클래스의 이름과 이러한 프로세스의 로컬 가상 머신 고유 ID (로컬 가상 머신 식별자, LVMID, 일반적으로 시스템 프로세스 ID)의 이름을 표시하는 것입니다.
JPS 명령 형식 :
jps [옵션] [hostid]
JPS는 RMI 프로토콜을 통해 RMI 서비스의 원격 가상 머신 프로세스 상태를 쿼리 할 수 있으며 HostID는 RMI 레지스트리에 등록 된 호스트 이름입니다.
JPS 기타 공통 옵션 :
-Q 메인 클래스의 이름을 생략 한 LVMID 만 출력합니다.
-M 출력 매개 변수는 가상 머신 프로세스가 시작될 때 메인 클래스의 메인 () 함수로 전달됩니다.
-L 메인 클래스의 전체 이름을 출력합니다. 프로세스가 JAR 패키지를 실행하면 JAR 경로를 출력하십시오.
-V 가상 기계 프로세스가 시작될 때 -v 출력 JVM 매개 변수.
JPS 명령 샘플 :
[root@localhost ~]# jps -l3914 org.zhangyoubao.payservice.app12180 sun.tools.jps.jps6913 org.zhangyoubao.userprofiler.app
JSTAT : 가상 머신 통계 모니터링 도구
JSTAT는 가상 머신의 다양한 작동 상태 정보를 모니터링하는 데 사용되는 도구입니다. 로컬 또는 원격 가상 머신 프로세스에서 클래스로드, 메모리 gc.jit과 같은 실행중인 매개 변수를 표시 할 수 있습니다.
JSTAT 명령 형식 :
jstat [옵션 vmid [interval [s | ms] [count]]]
간격 및 카운트는 쿼리 간격 및 시간을 나타냅니다. 이 두 매개 변수가 생략되면 한 번만 쿼리하는 것을 의미합니다.
JSTAT에 일반적으로 사용되는 기타 옵션 :
클래스 클래스의로드/언로드 수와 총 공간 로딩 시간을 모니터링합니다.
-Compiler 출력 방법, 시간 소모 및 JIT 컴파일러가 컴파일 한 기타 정보;
-PRINTCOMPILATION JIT 컴파일 메소드를 출력하는 방법;
-GC는 Java 힙의 상태를 모니터링합니다.
-gccapacity 모니터링 컨텐츠는 기본적으로 -GC와 동일하지만 출력은 Java의 각 영역의 최대/최소 공간에 중점을 둡니다.
-gcutil 모니터링 컨텐츠는 기본적으로 -GC와 동일하지만 출력은 우주 사용에 중점을 둡니다.
-gccause -gcutil 함수와 같은 추가 출력은 마지막 GC를 유발합니다.
-GCNEW는 차세대 GCS의 상태를 모니터링합니다.
-gcnewcapacity는 차세대를 모니터링하고 -gccapacity와 동일하게 출력합니다.
-gcold 노인의 GC 상태를 모니터링합니다.
-gcoldcapacity 노인을 모니터링하고 -gccapacity와 동일하게 출력합니다.
-gcpermcapactiy는 영구 생성 (코드 영역)을 모니터링하고 -gccapacity와 동일하게 출력합니다.
JSTAT 명령 샘플 :
[root@localhost ~]# JSTAT -GC 6913 S0C S1C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 34048.0 34048.0 0.0 3217.8 272640.0 171092.7 683264.0 46872.0 2803264.0 46872.0 37857 380.644 69 3.447 384.091
Jinfo : Java 구성 정보 도구
Jinfo의 기능은 가상 머신의 다양한 매개 변수를 실시간으로보고 조정하는 것입니다.
Jinfo 명령 형식 :
Jinfo [옵션] PID
Jinfo에 일반적으로 사용되는 기타 옵션 :
-flag name = 값 매개 변수를 수정합니다
-플래그 이름 매개 변수 매개 변수입니다
샘플 jinfo 명령 :
[root@localhost ~]# jinfo 6913은 ID 6913을 처리하기 위해 차단하는 것, 기다려주십시오 ... 디버거 디버거가 성공적으로 첨부되었습니다. 서버 컴파일러 감지. JVM 버전은 24.91 -b01java 시스템 속성입니다 : ... VM 플래그 : -XMS1000M -XMX1000M -DCONF =/usr/local/local/spec/spec/spec/user/spec. -dserver.root =/usr/local/user_profiler -dcom.sun.management.jmxremote.port = 7003 -dcom.sun.management.jmxremote.ssl = false -dcom.sun.management.jmxremote.authenticate = false -verbose : gc -xx :+printgcdetails -xx :+printgcdatestamps -xx :+useconcmarksweepgc
JMAP : Java 메모리 매핑 도구
JMAP 명령을 사용하여 힙 스토리지 스냅 샷 (덤프 파일)을 생성 할 수 있습니다. 또한 Finalize 대기열 (자체 사기 큐), Java 힙 및 코드 영역의 세부 사항을 확인할 수도 있습니다.
JMAP 명령 형식 :
jmap [옵션] vmid
JMAP에 일반적으로 사용되는 기타 옵션 :
-Dump는 Java 힙 스토리지의 스냅 샷을 생성합니다. 형식 : -dump : [live,] format = b, file = <filename>;
-FinalizerInfo Finalizer 현상이 최종 방법을 실행하기를 기다리는 F- 큐어로 객체를 표시합니다.
-Heap은 사용되는 재활용 유형, 매개 변수 구성, 세대 상태 대기와 같은 Java 힙의 자세한 정보를 표시합니다.
-Histo는 클래스, 인스턴스 북 및 총 용량을 포함하여 힙에 객체의 통계를 표시합니다.
-Permstat 클래스 로더를 통계 포털로 사용하여 영구 생성 메모리 정보를 표시합니다.
-f 가상 머신 프로세스 힙 덤프 옵션이 응답하지 않으면이 옵션을 사용하여 덤프 스냅 샷을 강제 할 수 있습니다.
JMAP 명령 샘플 :
[root@localhost ~] #jmap -histo 6913 | Head -20 Num #instances #Bytes 클래스 이름 ------------------------------------ 1 : 1864966 113459432 [C 2 : 201846 49201192 [B 3 : 1597065 38329560 JAVA.LANG.String 4 : 117477. 15037056 org.zhangyoubao.thriftdef.userusefulinfo 5 : 47104 11072048 [i 6 : 268631 8596192 java.util.hashmap $ 항목 7 : 48812 7451760 <constmethodklass> 8 : 100683 6443712 com.mysql.jdbc.connectionPropertiesimpl $ booleanconnectionProperty 9 : 48812 6257856 <메소드 klass> 10 : 4230 5271640 <ConstantPoolKlass> 11 : 159491 5103712 Java.util.util.hashtable org.zhangyoubao.common.cache.adv.node 13 : 127027 4064864 java.util.concurrent.concurrenthashmap $ Hashentry 14 : 230433 3686928 Java.lang.integer 15 : 3765 3049824 <constantpoolclass> 16 : 209148 com.mysql.jdbc.field 17 : 4230 2943840 <인스턴스 klassklass>
여기서 [C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][] .
JHAT : 가상 머신 힙 전송 스냅 샷 분석 도구
JHAT 명령은 JMAP와 함께 사용되며 JMAP에서 생성 된 덤프 파일을 분석하는 데 사용됩니다. JHAT에는 내장 된 미니 HTTP/HTML 서버가 있습니다. 생성 된 덤프 파일의 분석 결과가 브라우저에서 볼 수 있습니다.
JHAT 명령 형식 :
JMAP 파일 이름
JHAT 명령 샘플 :
[root@localhost ~]# jhat html_intercept_server.dump html_intercept_server.dump에서 읽기 읽기 ... 덤프 파일은 11 월 23 일 13:05:33 CST 2016snapshot 읽기, 해결 ... 203681 객체 ... 203681 객체 ... 40 점을 기대합니다 ............................... 포트 7000server의 HTTP 서버가 준비되었습니다.
Jstack : Java 스레드 스택 추적 도구
Jstack은 가상 시스템의 현재 시간의 스레드 스냅 샷을 생성하는 데 사용됩니다. 스레드 스냅 샷은 현재 가상 머신의 각 스레드가 실행되는 메소드 스택 계획입니다. 스레드 스냅 샷을 생성하는 주요 목적은 스레드가 오랫동안 일시 중지 된 이유를 찾는 것입니다. 스레드가 일시 중지되면 jstack을 사용하여 반응이없는 스레드가 백그라운드에서 무엇을하는지 또는 자원이 기다리고있는 자원을 확인하십시오.
jstack 명령 형식 :
Jstack [옵션] vmid
Jstack 기타 옵션 :
-f 정상적으로 출력 요청이 응답되지 않으면 스레드 스택을 출력하도록 강제하십시오.
-L 스택을 표시하는 것 외에도 잠금에 대한 추가 정보를 표시합니다.
-M 로컬 메소드가 호출되면 C/C ++의 스택을 표시 할 수 있습니다.
Jstack 명령 샘플 :
[root@localhost ~]# jstack 29577 | Head -202016-11-23 12 : 58 : 23 Full 스레드 덤프 OpenJDK Server VM (24.91-B01 혼합 모드) : "PULL-1-THREAD-7261"PRIO = 10 TID = 0X0893A400 NID = 0x6B0D 대기 조건 [0X652000000]. java.lang.thread.state : sun.misc.unsafe.park (기본 메소드)의 timed_waiting (주차) - <0x75b5b400> (java.util.concurrent.synchronousqueue $ transferstack)를 기다리는 주차 java.util.concurrent.locks.locksupport.parknanos (locksupport.java:226) at java.util.concurrent.synchronousqueue $ transferstack.awaitfulfill (synchronousqueue.java:460) java.util.concurrent.synchronousqueue $ transferstack.transfer (synchronousqueue.java:359) at java.util.concurrent.synchronousqueue.poll (synchronousqueue.java:942) at java.util.concurrent.threadpoolexecutor.gettask (java.util.concurrent.threadpoolexecutor.runworker (threadpoolexecutor.java:1130) at java.util.concurrent.threadpoolexecutor $ worker.run (java.lang.lang.run (thread.java:745)의 un (rider poolexecutor.java:615) "service_hot_lscs-0"daemon prio = 10 tid = 0x6982dc00 nid = 0x6aeb에 대한 [0x6aeb. java.lang.thread.state : java.lang.thread.sleep (기본 방법) org.zhangyoubao.video.client.runner.simplevideorunner.dowork (simplevideorunner.java:150)의 timed_waiting (수면)
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용이 귀하의 연구 나 업무에 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다.