자바 가상 기기의 고장 처리 도구를 깊이 이해하다

앞말
본고는 주로 여러분에게 java 가상 기기의 고장 처리 도구를 소개합니다. 본고에서 언급한 도구는 다음과 같습니다.
이름
주요 역할
jps
지정된 시스템 내의 모든 HotSpot 가상 머신 프로세스를 표시하는 JVM process Status Tool보통 로컬 호스트
jstat
JVM Statistics Monitoring Tool, HotSpot VM 운영 데이터 수집
jinfo
Configuration Info for java, VM 구성 정보 표시
jmap
Memory Map for Java, 가상 머신의 메모리 메모리 저장 스냅샷 생성(heapdump 파일)
jhat
Heapdump 파일을 분석하는 데 사용되는 JVM Heap Dump Browser는 브라우저에서 분석 결과를 볼 수 있도록 HTTP/HTML 서버를 구축합니다.
jstack
Stack Trace for Java, VM의 스레드 스냅샷 표시
jps: 가상 머신 프로세스 상황 도구
jps의 기능은 유닉스/liunx의 ps 명령과 유사합니다.다만 이것은 실행 중인 가상 머신 프로세스를 인쇄하고 가상 머신이 실행하는 메인 클래스의 이름과 이 프로세스를 표시하는 로컬 가상 머신의 유일한 ID(Local Virtual Machine Identifier, LVMID, 보통 시스템 프로세스 ID)입니다.
jps 명령 형식:

jps [options] [hostId]
jps는 RMI 프로토콜 조회를 통해 RMI 서비스의 원격 가상 머신 프로세스 상태를 열 수 있으며, hostId는 RMI 등록표에 등록된 호스트 이름입니다.
jps 기타 일반 옵션:
-q는 LVMID만 출력하고 마스터 클래스의 이름은 생략합니다.
- 가상 머신 프로세스가 시작될 때 메인 클래스main () 함수에 전달되는 매개 변수를 출력합니다.
- l 출력 메인 클래스의 전칭, 프로세스가 실행하는 것이jar 패키지라면jar 경로를 출력합니다.
-v 출력 VM 프로세스가 시작될 때 JVM 매개 변수입니다.
jps 명령 예제:

[root@localhost ~]# jps -l
3914 org.zhangyoubao.payservice.App
12180 sun.tools.jps.Jps
6913 org.zhangyoubao.userprofiler.App
jstat: 가상 컴퓨터 통계 정보 감시 도구
jstat은 가상 컴퓨터의 각종 운행 상태 정보를 감시하는 도구입니다.로컬 또는 원격 가상 머신 프로세스의 클래스load, 메모리 gc를 표시할 수 있습니다.jit 등 실행 매개 변수.
jstat 명령 형식:

jstat [option vmid [interval [s|ms] [count]]]
interval과count는 조회 간격과 횟수를 대표합니다.만약 이 두 개의 매개 변수를 생략한다면, 설명은 한 번만 조회하는 것이다.
jstat 기타 일반 옵션:
-class 감시류load/unload 수량, 총 공간 이미 적재 시간;
-compiler는 JIT 컴파일러가 컴파일한 방법, 시간 소모 등 정보를 출력합니다.
-printcompilation 출력이 JIT에 의해 컴파일된 방법;
- gc 자바 더미 상황 감시;
-gccapacity 감시 내용은 -gc와 기본적으로 같지만 출력은 자바 각 구역의 최대/최소 공간을 주목한다.
-gcutil 감시 내용은 -gc와 기본적으로 같지만 출력 관심은 이미 사용 공간이 백분율을 차지한다.
-gccause는 -gcutil 기능과 마찬가지로 추가 출력으로 인해 지난번 GC가 발생한 원인을 초래한다.
- gcnew 신생대 GC 상황 감시;
-gcnewcapacity는 신생대를 감시하고 출력은 -gccapacity와 같다.
- gcold 노년기 GC상황 감시;
-gcoldcapacity는 오래된 연대를 감시하고 출력은 -gccapacity와 같다.
- gcpermcapactiy 감시 영구대(코드 구역), 출력과 - gccapacity;
jstat 명령 예제:

[root@localhost ~]# jstat -gc 6913
 S0C 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 168910.7 46872.0 28031.2 37857 380.644 69  3.447 384.091
jinfo: Java 구성 정보 도구
jinfo의 역할은 가상 기기의 각종 파라미터를 실시간으로 보고 조정하는 것이다.
jinfo 명령 형식:

jinfo [option] pid
jinfo 기타 일반 옵션:
-flag name=value 수정 매개 변수
-flagname 매개 변수
jinfo 명령 예제:

[root@localhost ~]# jinfo 6913
Attaching to process ID 6913, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.91-b01
Java System Properties:
...

VM Flags:

-Xms1000m -Xmx1000m -Dconf=/usr/local/user_profiler/conf -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 명령은 덤프 저장 스냅샷 (dump 파일) 을 만드는 데 사용할 수 있습니다.이것은finalize 대기열 (자기 구조 대기열), 자바 더미, 코드 구역에 대한 상세한 정보를 찾을 수 있습니다.
jmap 명령 형식:

jmap [option] vmid
jmap 기타 일반 옵션:
-dump는 자바 메모리 스냅샷을 생성합니다.형식: -dump: [live,]format=b,file=;
-finalizerinfo는 F-Queue에서 Finalizer 현상이 finalize 방법을 실행하기를 기다리는 대상을 표시합니다.
- heap는 자바 더미의 상세한 정보를 표시합니다. 예를 들어 어떤 회수기, 파라미터 설정, 세대별 상황 대기 등입니다.
- histo는 무더기의 대상 통계 정보를 표시하는데 클래스, 실례서, 합계 용량을 포함한다.
-permstat은 ClassLoader를 통계 입구로 영구 메모리 정보를 표시합니다.
-F 가상 머신 프로세스 더미-dump 옵션이 응답하지 않을 때 이 옵션을 사용하여dump 스냅샷을 강제로 생성할 수 있습니다.
jmap 명령 예제:

[root@localhost ~]# jmap -histo 6913|head -20

 num  #instances   #bytes class name
----------------------------------------------
 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$Entry
 7:   48812  7451760 <constMethodKlass>
 8:  100683  6443712 com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty
 9:   48812  6257856 <methodKlass>
 10:   4230  5271640 <constantPoolKlass>
 11:  159491  5103712 java.util.Hashtable$Entry
 12:  120226  4809040 org.zhangyoubao.common.cache.adv.Node
 13:  127027  4064864 java.util.concurrent.ConcurrentHashMap$HashEntry
 14:  230433  3686928 java.lang.Integer
 15:   3765  3049824 <constantPoolCacheKlass>
 16:   20917  3012048 com.mysql.jdbc.Field
 17:   4230  2943840 <instanceKlassKlass>
그중[C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][] .
jhat: 가상 머신 덤프 메모리 스냅샷 분석 도구
jhat 명령은 jmap과 조합하여 사용하고 jmap에서 생성된dump 파일을 분석하는 데 사용됩니다.jhat는 마이크로 HTTP/HTML 서버를 내장하여 생성된dump 파일의 분석 결과를 브라우저에서 볼 수 있습니다.
jhat 명령 형식:

jmap filename
jhat 명령 예제:

[root@localhost ~]# jhat html_intercept_server.dump 
Reading from html_intercept_server.dump...
Dump file created Wed Nov 23 13:05:33 CST 2016
Snapshot read, resolving...
Resolving 203681 objects...
Chasing references, expect 40 dots........................................
Eliminating duplicate references........................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
jstack:java 라인 추적 도구
jstack은 가상 컴퓨터의 현재 시간의 스레드 스냅샷을 만드는 데 사용됩니다.스레드 스냅은 현재 가상 기기의 모든 스레드가 실행 중인 방법 창고 계획으로 스레드 스냅을 생성하는 주요 목적은 스레드가 장시간 멈추는 원인을 포지셔닝하는 것이다.루틴이 멈출 때, jstack을 통해 응답이 없는 루틴이 백그라운드에서 무슨 일을 하거나 자원을 기다리고 있는지 확인합니다.
jstack 명령 형식:

jstack [option] vmid
jstack 추가 옵션:
- F 정상적인 출력 요청이 응답되지 않을 때 라인 스택을 강제로 출력합니다.
- l 창고를 표시하는 것 외에 자물쇠에 대한 추가 정보를 표시합니다.
-m 로컬 메서드를 호출하면 C/C++ 스택을 표시할 수 있습니다.
jstack 명령 예제:

[root@localhost ~]# jstack 29577|head -20
2016-11-23 12:58:23
Full thread dump OpenJDK Server VM (24.91-b01 mixed mode):

"pool-1-thread-7261" prio=10 tid=0x0893a400 nid=0x6b0d waiting on condition [0x652ad000]
 java.lang.Thread.State: TIMED_WAITING (parking)
  at sun.misc.Unsafe.park(Native Method)
  - parking to wait for <0x75b5b400> (a java.util.concurrent.SynchronousQueue$TransferStack)
  at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
  at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
  at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
  at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:942)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  at java.lang.Thread.run(Thread.java:745)

"service_hot_lscs-0" daemon prio=10 tid=0x6982dc00 nid=0x6aeb waiting on condition [0x64ce1000]
 java.lang.Thread.State: TIMED_WAITING (sleeping)
  at java.lang.Thread.sleep(Native Method)
  at org.zhangyoubao.video.client.runner.SimpleVideoRunner.doWork(SimpleVideoRunner.java:150)
총결산
이상은 바로 이 글의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 어느 정도 도움이 되고 의문이 있으면 댓글로 교류하시기 바랍니다.

좋은 웹페이지 즐겨찾기