一、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