一. jps(JVM Process Status Tools)
jps是參照Unix系統(tǒng)的取名規(guī)則命名的寺旺,而他的功能和ps的功能類似茅逮,可以列舉正在運行的餓虛擬機進程并顯示虛擬機執(zhí)行的主類以及這些進程的唯一ID(LVMID折晦,對應(yīng)本機來說和PID相同)翔脱,他的用法如下:
jps [option] [hostid]
其中hostid默認為本機哗讥,而option選項包含以下選項
Option | Function |
---|---|
-q | 只輸出LVMID |
-m | 輸出JVM啟動時傳給主類的方法 |
-l | 輸出主類的全名做祝,如果是Jar則輸出jar的路徑 |
-v | 輸出JVM的啟動參數(shù) |
二. jstat(JVM Statistics Monitoring)
2.1 介紹
jstat主要用于監(jiān)控虛擬機的各種運行狀態(tài)信息永毅,如類的裝載逢捺、內(nèi)存、垃圾回收们拙、JIT編譯器等稍途,在沒有GUI的服務(wù)器上,這款工具是首選的一款監(jiān)控工具砚婆。其用法如下:
jstat [option vmid [interval [s|ms] [vount] ] ]
參數(shù)interval和count分別表示查詢間隔和查詢次數(shù)械拍,如每1毫秒查詢一次進程20445的垃圾回收情況,監(jiān)控20次装盯,命令如下所示:
jstat –gc 20445 1 20
相關(guān)的輸出參數(shù)介紹可參照官方的說明(注:網(wǎng)址鏈接請點擊此處)
選項option代表用戶需要查詢的虛擬機的信息坷虑,主要分為3類:類裝載、垃圾回收和運行期的編譯情況埂奈,具體如下表所示:
Option | Function |
---|---|
-class | 監(jiān)視類的裝載迄损、卸載數(shù)量以及類的裝載總空間和耗費時間等 |
-gc | 監(jiān)視Java堆,包含eden账磺、2個survivor區(qū)芹敌、old區(qū)和永久帶區(qū)域的容量、已用空間绑谣、GC時間合計等信息 |
-gccapcity | 監(jiān)視內(nèi)容與-gc相同党窜,但輸出主要關(guān)注Java區(qū)域用到的最大和最小空間 |
-gcutil | 監(jiān)視內(nèi)容與-gc相同,但輸出主要關(guān)注已使用空間占總空間的百分比 |
-gccause | 與-gcutil輸出信息相同借宵,額外輸出導(dǎo)致上次GC產(chǎn)生的原因 |
-gcnew | 監(jiān)控新生代的GC情況 |
-gcnewcapacity | 與-gcnew監(jiān)控信息相同幌衣,輸出主要關(guān)注使用到的最大和最小空間 |
-gcold | 監(jiān)控老生代的GC情況 |
-gcoldcapacity | 與-gcold監(jiān)控信息相同,輸出主要關(guān)注使用到的最大和最小空間 |
-gcpermcapacity | 輸出永久帶用到的最大和最小空間 |
-compiler | 輸出JIT編譯器編譯過的方法壤玫、耗時信息 輸出已經(jīng)被JIT編譯的方法 |
2.2 各個參數(shù)說明
- -gc
參數(shù) | 說明 |
---|---|
S0C: | 年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié)) |
S1C: | 年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié)) |
S0U: | 年輕代中第一個survivor(幸存區(qū))目前已使用空間 (字節(jié)) |
S1U: | 年輕代中第二個survivor(幸存區(qū))目前已使用空間 (字節(jié)) |
EC: | 年輕代中Eden(伊甸園)的容量 (字節(jié)) |
EU: | 年輕代中Eden(伊甸園)目前已使用空間 (字節(jié)) |
OC: | Old代的容量 (字節(jié)) |
OU: | Old代目前已使用空間 (字節(jié)) |
MC: | 方法區(qū)代的容量 (字節(jié)) |
MU: | 方法區(qū)目前已使用空間 (字節(jié)) |
PC: | Perm(持久代)的容量 (字節(jié)) |
PU: | Perm(持久代)目前已使用空間 (字節(jié)) |
YGC: | 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù) |
YGCT: | 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c所用時間(s) |
FGC: | 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù) |
FGCT: | 從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s) |
GCT: | 從應(yīng)用程序啟動到采樣時gc用的總時間(s) |
- gccapcity
參數(shù) | 說明 |
---|---|
NGCMN | 年輕代(young)中初始化(最小)的大小 (字節(jié)) (KB)豁护。 |
NGCMX | 年輕代(young)的最大容量(KB)。 |
NGC | 年輕代(young)中當(dāng)前的容量(KB)欲间。 |
S0C | 見-gc參數(shù)楚里。 |
S1C | 見-gc參數(shù)。 |
EC | 見-gc參數(shù)猎贴。 |
OGCMN | old代中初始化(最小)的大邪喽小(KB)。 |
OGCMX | old代的最大容量(KB)她渴。 |
OGC | old代當(dāng)前新生成的容量(KB)达址。 |
OC | 見-gc參數(shù)。 |
MCMN | 方法區(qū)中初始化(最小)的大谐煤摹(KB)沉唠。 |
MCMX | 方法區(qū)的最大容量(KB)。 |
MC | 見-gc參數(shù)苛败。 |
CCSMN | 最小壓縮類空間大小 |
CCSMX | 最大壓縮類空間大小 |
CCSC | 當(dāng)前壓縮類空間大小 |
PGCMN | perm代中初始化(最小)的大新稹(KB)径簿。 |
PGCMX | perm代的最大容量(KB)。 |
PGC | perm代當(dāng)前新生成的容量(KB)嘀韧。 |
PC | 見-gc參數(shù)篇亭。 |
YGC | 見-gc參數(shù)。 |
FGC | 見-gc參數(shù)乳蛾。 |
- gccause
參數(shù) | 說明 |
---|---|
LGCC | 上次垃圾收集的原因暗赶。 |
GCC | 當(dāng)前垃圾收集的原因。 |
- gcnew
參數(shù) | 說明 |
---|---|
S0C | 見-gc參數(shù)肃叶。 |
S1C | 見-gc參數(shù)。 |
S0U | 見-gc參數(shù)十嘿。 |
S1U | 見-gc參數(shù)因惭。 |
TT | 對象在新生代存活的次數(shù)。 |
MTT | 對象在新生代存活的最大次數(shù)绩衷。 |
DSS | 期望的幸存區(qū)大斜哪А(KB)。 |
EC | 見-gc參數(shù)咳燕。 |
EU | 見-gc參數(shù)勿决。 |
YGC | 見-gc參數(shù)。 |
YGCT | 見-gc參數(shù)招盲。 |
- gcnewcapacity
參數(shù) | 說明 |
---|---|
NGCMN | 見gccapcity參數(shù)低缩。 |
NGCMX | 見gccapcity參數(shù)。 |
NGC | 見gccapcity參數(shù)l曹货。 |
S0CMX | 年輕代中第一個survivor(幸存區(qū))的最大容量(KB)咆繁。 |
S0C | 見-gc參數(shù)。 |
S1CMX | 年輕代中第二個survivor(幸存區(qū))的最大容量(KB)顶籽。 |
S1C | 見-gc參數(shù)玩般。 |
ECMX | 年輕代中Eden(伊甸園)的最大容量(KB)。 |
EC | 見-gc參數(shù)礼饱。 |
YGC | 見-gc參數(shù)坏为。 |
FGC | 見-gc參數(shù)。 |
- gcold
參數(shù) | 說明 |
---|---|
PC | 見-gc參數(shù)镊绪。 |
PU | 見-gc參數(shù)匀伏。 |
OC | 見-gc參數(shù)。 |
OU | 見-gc參數(shù)镰吆。 |
YGC | 見-gc參數(shù)帘撰。 |
FGC | 見-gc參數(shù)。 |
FGCT | 見-gc參數(shù)万皿。 |
GCT | 見-gc參數(shù)摧找。 |
- gcoldcapacity
參數(shù) | 說明 |
---|---|
OGCMN | 見gccapcity參數(shù)核行。 |
OGCMX | 見gccapcity參數(shù)。 |
OGC | 見gccapcity參數(shù)蹬耘。 |
OC | 見-gc參數(shù)芝雪。 |
YGC | 見-gc參數(shù)。 |
FGC | 見-gc參數(shù)综苔。 |
FGCT | 見-gc參數(shù)惩系。 |
GCT | 見-gc參數(shù)。 |
- gcpermcapacity
參數(shù) | 說明 |
---|---|
PGCMN | 見gccapcity參數(shù)如筛。 |
PGCMX | 見gccapcity參數(shù)堡牡。 |
PGC | 見gccapcity參數(shù)。 |
PC | 見-gc參數(shù)杨刨。 |
YGC | 見-gc參數(shù)晤柄。 |
FGC | 見-gc參數(shù)。 |
FGCT | 見-gc參數(shù)妖胀。 |
GCT | 見-gc參數(shù)芥颈。 |
- gcutil
參數(shù) | 說明 |
---|---|
S0 | 年輕代中第一個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比 |
S1 | 年輕代中第二個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比 |
? | 年輕代中Eden(伊甸園)已使用的占當(dāng)前容量百分比 |
? | old代已使用的占當(dāng)前容量百分比 |
P | perm代已使用的占當(dāng)前容量百分比 |
YGC | 見-gc參數(shù)。 |
YGCT | 見-gc參數(shù)赚抡。 |
FGC | 見-gc參數(shù)爬坑。 |
FGCT | 見-gc參數(shù)。 |
GCT | 見-gc參數(shù)涂臣。 |
三. jinfo(JVM configuration Info for Java)
Jinfo的作用是實時查看虛擬機的各項參數(shù)信息jps –v可以查看虛擬機在啟動時被顯式指定的參數(shù)信息盾计,但是如果你想知道默認的一些參數(shù)信息呢?除了去查詢對應(yīng)的資料以外肉康,jinfo就顯得很重要了闯估。jinfo的用法如下:
Jinfo [option] pid
如 jinfo –sysprops {pid}
四. jmap(JVM Memory Map for Java)
jmap用于生成堆快照(heapdump)。當(dāng)然我們有很多方法可以取到對應(yīng)的dump信息吼和,如我們通過JVM啟動時加入啟動參數(shù) –XX:HeapDumpOnOutOfMemoryError參數(shù)涨薪,可以讓JVM在出現(xiàn)內(nèi)存溢出錯誤的時候自動生成dump文件,亦可以通過-XX:HeapDumpOnCtrlBreak參數(shù)炫乓,在運行時使用ctrl+break按鍵生成dump文件刚夺,當(dāng)然我們也可以使用kill -3 pid的方式去恐嚇JVM生成dump文件。jmap的作用不僅僅是為了獲取dump文件末捣,還可以用于查詢finalize執(zhí)行隊列侠姑、Java堆和永久帶的詳細信息,如空間使用率箩做、垃圾回收器等莽红。其運行格式如下:
jmap [option] vmip
Option的信息如下表所示:
Option | Function |
---|---|
-dump | 生成對應(yīng)的dump信息,用法為-dump:[live,]format=b,file={fileName} |
-finalizerinfo | 顯示在F-Queue中等待的Finalizer方法的對象(只在linux下生效) |
-heap | 顯示堆的詳細信息、垃圾回收器信息安吁、參數(shù)配置醉蚁、分代詳情等 |
-histo | 顯示堆棧中的對象的統(tǒng)計信息,包含類鬼店、實例數(shù)量和合計容量 |
-permstat | 以ClassLoder為統(tǒng)計口徑顯示永久帶的內(nèi)存狀態(tài) |
-F | 當(dāng)虛擬機對-dump無響應(yīng)時可使用這個選項強制生成dump快照 |
示例:jmap -dump:format=b,file=heap.dump 20445
五. jhat(JVM Heap Analysis Tool)
jhat是用來分析dump文件的一個微型的HTTP/HTML服務(wù)器网棍,它能將生成的dump文件生成在線的HTML文件,讓我們可以通過瀏覽器進行查閱妇智,然而實際中我們很少使用這個工具滥玷,因為一般服務(wù)器上設(shè)置的堆、棧內(nèi)存都比較大巍棱,生成的dump也比較大惑畴,直接用jhat容易造成內(nèi)存溢出,而是我們大部分會將對應(yīng)的文件拷貝下來航徙,通過其他可視化的工具進行分析桨菜。啟用法如下:
jhat {dump_file}
執(zhí)行命令后,我們看到系統(tǒng)開始讀取這段dump信息捉偏,當(dāng)系統(tǒng)提示Server is ready的時候,用戶可以通過在瀏覽器鍵入http://ip:7000進行查詢泻红。
六. jstack(JVM Stack Trace for java)
jstack用于JVM當(dāng)前時刻的線程快照夭禽,又稱threaddump文件,它是JVM當(dāng)前每一條線程正在執(zhí)行的堆棧信息的集合谊路。生成線程快照的主要目的是為了定位線程出現(xiàn)長時間停頓的原因讹躯,如線程死鎖、死循環(huán)缠劝、請求外部時長過長導(dǎo)致線程停頓的原因潮梯。通過jstack我們就可以知道哪些進程在后臺做些什么?在等待什么資源等惨恭!其運行格式如下:
jstack [option] vmid
相關(guān)的option和function如下表所示:
Option | Function |
---|---|
-F | 當(dāng)正常輸出的請求不響應(yīng)時強制輸出線程堆棧 |
-l | 除堆棧信息外秉馏,顯示關(guān)于鎖的附加信息 |
-m | 顯示native方法的堆棧信息 |
jstack -l 20445