jps -m -l -v -m 輸出傳入main方法的參數 -l 輸出main類或jar的全限名 -v 輸出傳入的jvm參數 /opt/running # jps -lmv 1 bootshiro.jar --spring.profiles.active=prod 97 jdk.jcmd/sun.tools.jps.Jps -lmv -Dapplication.home=/opt/openjdk-12 -Xms8m -Djdk.module.main=jdk.jcmd
jstack -l -e <pid> -l 長列表,打印鎖附加信息 -e 擴展列表,打印線程附件信息 <pid> java進程ID,經過jps查看 /opt/running # jstack -l -e 1 2020-02-20 13:17:23 Full thread dump OpenJDK 64-Bit Server VM (12-ea+29 mixed mode, sharing):
jmap -dump:live,format=b,file=heap.hprof <pid> -dump:live 轉儲活動的對象,若是不指定(去掉live)就是全部對象 format=b 二進制格式 file=heap.bin 轉儲生成文件heap.bin <pid> java進程ID /opt/running # jmap -dump:,format=b,file=heap.hprof 1 Heap dump file created 轉儲生成的dump文件能夠導入VisualVm,jConsole或者jhat命令查看 /opt/running # jhat heap.hprof Reading from heap.bin... Dump file created Thu Feb 20 21:29:23 CST 2020 Snapshot read, resolving... Resolving 660870 objects... Chasing references, expect 132 dots... Eliminating duplicate references... Snapshot resolved. Started HTTP server on port 7000 Server is ready. 經過localhost:7000查看
jstat --help|-options jstat -<option> [-h<lines>] <vmid> [<interval> [<count>]] -<option> 選項,經過jstat -options獲取 [-h<lines>] 可選項,表示多少行以後再次打印頭部信息 <vmid> 監控的java進程ID [<interval>] 可選項,打印間隔,表示每隔多少ms打印一次信息 [<count>] 可選項,打印次數,表示打印幾回就中止 下面表示: 分析進程ID爲1的進程的GC狀況,2行以後就再次打印頭部,每隔2秒打印一次,總打印4次 /opt/running # jstat -gc -h2 1 2000 4 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT 2816.0 2816.0 0.0 597.8 22528.0 18711.1 56028.0 33616.4 80680.0 78501.6 9336.0 8607.4 1553 5.452 4 0.757 - - 6.209 2816.0 2816.0 0.0 597.8 22528.0 18711.1 56028.0 33616.4 80680.0 78501.6 9336.0 8607.4 1553 5.452 4 0.757 - - 6.209 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT 2816.0 2816.0 0.0 597.8 22528.0 18711.1 56028.0 33616.4 80680.0 78501.6 9336.0 8607.4 1553 5.452 4 0.757 - - 6.209 2816.0 2816.0 0.0 597.8 22528.0 18711.1 56028.0 33616.4 80680.0 78501.6 9336.0 8607.4 1553 5.452 4 0.757 - - 6.209 查看option選項有哪些可選參數 /opt/running # jstat -options -class 顯示加載的class數量,所佔空間,耗時 -compiler 顯示編譯的數量,失敗,失敗的內容等信息 -gc (頻繁)顯示GC信息,年輕代,老年代,gc次數等信息 -gccapacity 顯示年輕代老年代永久代的內存佔用大小等信息 -gccause (頻繁)顯示最近一次GC信息和GC緣由 -gcmetacapacity 顯示元空間容量信息 -gcnew 顯示年輕代信息 -gcnewcapacity 顯示年輕代信息及佔用量 -gcold 顯示老年代信息 -gcoldcapacity 顯示老年代信息及佔用量 -gcutil 顯示GC的統計信息
/opt/running # jstat -gc -h2 1 2000 4 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT 2816.0 2816.0 0.0 597.8 22528.0 18711.1 56028.0 33616.4 80680.0 78501.6 9336.0 8607.4 1553 5.452 4 0.757 - - 6.209
jstat -gc | 參數解釋 |
---|---|
S0C | 年輕代8:1:1的第一個倖存區 |
S1C | 年輕代8:1:1的第二個倖存區 |
S0U | 第一個倖存區使用大小 |
S1U | 第二個倖存區使用大小 |
EC | 年輕代8:1:1中的伊甸園大小 |
EU | 伊甸園使用大小 |
OC | 老年代大小 |
OU | 老年代使用大小 |
MC | 方法區(元空間)大小 |
MC | 方法區(元空間)使用大小 |
CCSC | 壓縮類空間??大小 壓縮類 |
CCSU | 壓縮類空間使用大小 |
YGC | 發生的young gc次數 |
YGCT | young gc所耗時間 |
FGC | 發生的full gc次數 |
FGCT | full gc所耗時間 |
CGC | 併發垃圾蒐集次數(G1垃圾蒐集器) |
CGCT | 併發垃圾蒐集耗時 |
GCT | 總耗gc時間 |
top
查看高內存或高cpu的進程pid(大寫P排序cpu,大寫M排序內存)jps
查看要看的java進程pidtop -Hp <pid>
列出該pid進程下的全部線程信息(列表中PID爲線程十進制id)printf "%x\n" <threadId>
轉16進制jstack <pid> | grep <threadId>
查看該線程堆棧-XX:ErrorFile=/opt/log/hs_err_pid<pid>.log
設定生成路徑轉載請註明 from tomsun28html