很多人在學習java的時候隻是對java粗略的學了一遍,很少有人能了解jvm層面的一些東西,比如我們想看目前有多少個java程序,可以在指令行執行jps。下面我們來說說jps的一些詳細的用法。
jps
輸出正字運作的相關程序資訊
-
輸出傳遞給jvm參數jps -v
-
輸出子產品名以及包名,如果是jar 則出輸jar檔案全名jps -l
-
輸出傳遞給jvm參數jps -m
-
輸出程序号,包名,虛拟機參數等所有資訊jps -mlv
[[email protected] ~]# jps -mlv
12656 sun.tools.jps.Jps -mlv -Dapplication.home=/usr/java/jdk1.8.0_171 -Xms8m
16418 halo-latest.jar -Xms256m -Xmx256m
[[email protected] ~]#
jstat
監控指定Java程序的性能
-
顯示類的加載資訊的相關資訊;-class
-
顯示類編譯相關資訊;-compiler
-
顯示和gc相關的堆資訊-gc
-
堆記憶體統計-gccapacity
-
元空間大小-gcmetacapacity
-
新生代資訊-gcnew
-
新生代大小和使用情況-gcnewcapacity
-
顯示老年代和永久代的資訊;-gcold
-
老年代的大小-gcoldcapacity
-
顯示垃圾收集資訊-gcutil
-
顯示垃圾回收的相關資訊-gccause
-
輸出JIT編譯的方法資訊;-printcompilation
- 類的加載資訊 jstat -class pid
[[email protected] ~]# jstat -class 16418
Loaded Bytes Unloaded Bytes Time
13293 23828.4 0 0.0 17.14
Loaded: class加載的的總數量
Bytes: 占用空間大小
Unloaded 未加載數量
Bytes 未加載占用空間大小
Time: 加載總耗時 秒
- 類編譯的統計 jstat -compiler pid
[[email protected] ~]# jstat -compiler 16418
Compiled Failed Invalid Time FailedType FailedMethod
14109 3 0 62.83 1 org/springframework/core/xxxxxx
Compiled:編譯數量。
Failed:編譯失敗數量
Invalid:不可用數量
Time:編譯耗時 秒
FailedType:失敗類型
FailedMethod:失敗的方法
- gc回收統計 jstat -gc pid
[[email protected] ~]# jstat -gc 16418
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
8704.0 8704.0 0.0 5466.6 69952.0 29822.5 174784.0 73377.5 75008.0 71393.1 9472.0 8916.8 53 1.199 3 0.293 1.492
[[email protected] ~]#
S0C:第一個幸存區的大小
S1C:第二個幸存區的大小
S0U:第一個幸存區的使用大小
S1U:第二個幸存區的使用大小
EC:伊甸園區的大小
EU:伊甸園區的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區大小
MU:方法區使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時間
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間
- 堆記憶體統計 jstat -gccapacity pid
[[email protected] ~]# jstat -gccapacity 16418
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
87360.0 87360.0 87360.0 8704.0 8704.0 69952.0 174784.0 174784.0 174784.0 174784.0 0.0 1114112.0 75008.0 0.0 1048576.0 9472.0 53 3
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:目前新生代容量
S0C:第一個幸存區大小
S1C:第二個幸存區的大小
EC:伊甸園區的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:目前老年代大小
OC:目前老年代大小
MCMN:最小中繼資料容量
MCMX:最大中繼資料容量
MC:目前中繼資料空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:目前壓縮類空間大小
YGC:年輕代gc次數
FGC:老年代GC次數
- 新生代gc統計 jstat -gcnew pid
[[email protected] ~]# jstat -gcnew 16418
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
8704.0 8704.0 0.0 5466.6 6 15 4352.0 69952.0 30899.8 53 1.199
S0C:第一個幸存區大小
S1C:第二個幸存區的大小
S0U:第一個幸存區的使用大小
S1U:第二個幸存區的使用大小
TT:對象在新生代存活的次數
MTT:對象在新生代存活的最大次數
DSS:期望的幸存區大小
EC:伊甸園區的大小
EU:伊甸園區的使用大小
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時間
jmap
以獲得運作中的jvm的堆的快照,進而可以離線分析堆,以檢查記憶體洩漏,檢查一些嚴重影響性能的大對象的建立,檢查系統中什麼對象最多, 各種對象所占記憶體的大小等等。可以使用jmap生成Heap Dump
-
列印heap空間的概要jmap -heap 16418
[[email protected] ~]# jmap -heap 16418
Attaching to process ID 16418, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 268435456 (256.0MB)
NewSize = 89456640 (85.3125MB)
MaxNewSize = 89456640 (85.3125MB)
OldSize = 178978816 (170.6875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space): // 新生代區
capacity = 80543744 (76.8125MB) //配置設定的大小
used = 44269728 (42.218902587890625MB) //使用
free = 36274016 (34.593597412109375MB) //剩餘
54.96358351556143% used
Eden Space: //伊甸園區
capacity = 71630848 (68.3125MB)
used = 38671896 (36.880393981933594MB)
free = 32958952 (31.432106018066406MB)
53.98776795159538% used
From Space: //年輕代 幸存者1
capacity = 8912896 (8.5MB)
used = 5597832 (5.338508605957031MB)
free = 3315064 (3.1614913940429688MB)
62.80598359949448% used
To Space: /年輕代 幸存者2
capacity = 8912896 (8.5MB)
used = 0 (0.0MB)
free = 8912896 (8.5MB)
0.0% used
tenured generation: //老年代
capacity = 178978816 (170.6875MB)
used = 75138528 (71.65768432617188MB)
free = 103840288 (99.02981567382812MB)
41.98179967846027% used
30511 interned Strings occupying 3634816 bytes.
-
産生一個HeapDump檔案jmap -dump:live,format=b,file=/home/tess.dump 16418
-
統計各個類的執行個體數目以及占用記憶體,并按照記憶體使用量從多至少的順序排列。jmap -histo 16418
jinfo
檢視目标 Java 程序的參數,如傳遞給 Java 虛拟機的參數
-
jinfo 16418
jcmd
可以用來實作前面除了jstat 之外所有指令的功能。
文章來自網絡,有問題可以在下面評論,技術問題可以私聊。