【JVM】工具

一、JDK命令行工具

1. jps 查看Java進程
    C:\Users\Another>jps
    7488 OmsOperationServiceApplication
    10500 RemoteMavenServer
    17432 Launcher
    24024 Jps
    4152 jar
    10508
2. jinfo 查看和調整JVM配置參數

The jinfo command prints Java configuration information for a specified Java process or core file or a remote debug server. The configuration information includes Java system properties and Java Virtual Machine (JVM) command-line flags.

    # 查看某個java進程的name屬性的值 
    jinfo -flag name PID    
    #比如: 
    jinfo -flag MaxHeapSize PID  
    jinfo -flag UseG1GC PID 
    #查詢曾經賦過值的一些參數
    jinfo -flags PID 

    C:\Users\Another>jinfo -flag MaxHeapSize 7488
    -XX:MaxHeapSize=2136997888


3. jsta 統計信息監視工具

查看虛擬機性能統計信息

The jstat command displays performance statistics for an instrumented Java HotSpot VM. The target JVM is identified by its virtual machine identifier, or vmid option.

   #查詢類裝信息
    jstat -class PID 1000 10      #查看某個java進程的類裝載信息,每1000毫秒輸出一次,共輸出10次 比如: jstat -class PID 1000 10 
    C:\Users\Another>jstat -class 7488 1000 10
    Loaded  Bytes  Unloaded  Bytes     Time
     16772 30822.0      221   336.2      14.57
     16772 30822.0      221   336.2      14.57
     16772 30822.0      221   336.2      14.57

    #查看垃圾收集信息
    jstat -gc PID 1000 10 
    
    C:\Users\Another>jstat -gc 7488 1000 10
     S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
    8192.0 8192.0 7840.0  0.0   240640.0 123256.5  241152.0   95484.9   91352.0 85149.2 12032.0 10967.6    124    2.232   4      1.644    3.876
    8192.0 8192.0 7840.0  0.0   240640.0 123256.5  241152.0   95484.9   91352.0 85149.2 12032.0 10967.6    124    2.232   4      1.644    3.876

4.jstack 堆棧跟蹤工具

查詢線程堆信息

The jstack command prints Java stack traces of Java threads for a specified Java process, core file, or remote debug server.


    jstack pid
    
    C:\Users\Another>jstack 7488
    2020-03-15 12:26:34
    Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.181-b13 mixed mode):
    
    "DiscoveryClient-HeartbeatExecutor-1285" #1441 daemon prio=5 os_prio=0 tid=0x0000000021104000 nid=0x53a4 waiting on condition [0x000000007ac2e000]
       java.lang.Thread.State: WAITING (parking)
            at sun.misc.Unsafe.park(Native Method)
            - parking to wait for  <0x0000000082b38688> (a java.util.concurrent.SynchronousQueue$TransferStack)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
            at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
            at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
            at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
            at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)

5. jmap 內存映像工具
    #打印出堆內存相關信息
    jmap -heap  PID
    
    #dump出堆內存相關信息
    jmap -dump:format=b,file=heap.hprof PID 

關於dump下的文件,一般dump下來的文件直接看有些費力,可以結合MAT工具來分析,一般在開始中,JVM參數可以加上下面兩句,這樣內存溢出時,會自動dump文件

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof 

二、JDK 可視化工具
1. jconsole

JConsole工具是JDK自帶的可視化監控工具。查看java應用程序的運行概況、監控堆信息、永久區使用情況、類加 載情況等。

2. jvisualvm

(1)可以監控本地的java進程的CPU,類,線程等
(2)也可以監控遠端java進程,比如監控遠端tomcat;

如果是連接遠端tomcat[也可以是任意Java進程],比如部署在阿里雲服務器上的tomcat,可以按照以下步驟 (1)在visualvm中選中“遠程”,右擊“添加”
(2)主機名上寫服務器的ip地址,比如39.100.39.63
(3)右擊該主機,添加“JMX”,也就是通過JMX技術具體監控遠端服務器哪個Java進程
(4)要想讓服務器上的tomcat被連接,需要改一下Catalina.sh這個文件
注意下面的8998不要和服務器上其他端口衝突

    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote Djava.rmi.server.hostname=39.100.39.63 -Dcom.sun.management.jmxremote.port=8998 Dcom.sun.management.jmxremote.ssl=false Dcom.sun.management.jmxremote.authenticate=true Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password" 

(5)在…/conf文件中添加兩個文件jmxremote.access和jmxremote.password jmxremote.access

    guest readonly manager readwrite 
    jmxremote.password
    guest guest manager manager 
    授予權限 : chmod 600 jmxremot	

(6)將連接服務器地址改爲公網ip地址

   hostname -i   查看輸出情況  172.26.225.240 172.17.0.1 
    vim /etc/hosts  172.26.255.240 39.100.39.63 

(7)查看8998監聽情況,可以發現多開了幾個端口

    lsof -i:8998    得到PID 
    
    netstat -antup | grep PID    
    
    tcp        0      0 0.0.0.0:8998            0.0.0.0:*               LISTEN      2998/java               
    tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      2998/java
    tcp        0      0 0.0.0.0:37802           0.0.0.0:*               LISTEN      2998/java         
    tcp        0      0 0.0.0.0:9999            0.0.0.0:*               LISTEN      2998/java
    tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      2998/java   
    tcp        0      0 0.0.0.0:46341           0.0.0.0:*               LISTEN      2998/java 

(8)設置上述端口對應的阿里雲安全策略和防火牆策略 (9)啓動tomcat,可以查看一下日誌情況
(6)在剛纔的JMX中輸入8998端口,並且輸入用戶名和密碼則登錄成功

3. 內存分析工具MAT
4.GC日誌分析工具

要想分析日誌的信息,需要先拿到日誌文件,需要提前配置一下

 XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc:$CATALINA_HOME/logs/gc.log 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章