JVM監(jiān)控工具教程

一. 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ù)說明

  1. -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)
  1. 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ù)乳蛾。
  1. gccause
參數(shù) 說明
LGCC 上次垃圾收集的原因暗赶。
GCC 當(dāng)前垃圾收集的原因。
  1. 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ù)招盲。
  1. 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ù)。
  1. 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ù)摧找。
  1. 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ù)。
  1. 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ù)芥颈。
  1. 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市脱羡,隨后出現(xiàn)的幾起案子萝究,更是在濱河造成了極大的恐慌,老刑警劉巖锉罐,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帆竹,死亡現(xiàn)場離奇詭異,居然都是意外死亡脓规,警方通過查閱死者的電腦和手機栽连,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侨舆,“玉大人秒紧,你說我怎么就攤上這事绢陌。” “怎么了噩茄?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵下面,是天一觀的道長。 經(jīng)常有香客問我绩聘,道長沥割,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任凿菩,我火速辦了婚禮机杜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衅谷。我一直安慰自己椒拗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布获黔。 她就那樣靜靜地躺著蚀苛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玷氏。 梳的紋絲不亂的頭發(fā)上堵未,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音盏触,去河邊找鬼渗蟹。 笑死,一個胖子當(dāng)著我的面吹牛赞辩,可吹牛的內(nèi)容都是我干的雌芽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼辨嗽,長吁一口氣:“原來是場噩夢啊……” “哼世落!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起召庞,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤岛心,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后篮灼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忘古,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年诅诱,在試婚紗的時候發(fā)現(xiàn)自己被綠了髓堪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖干旁,靈堂內(nèi)的尸體忽然破棺而出驶沼,到底是詐尸還是另有隱情,我是刑警寧澤争群,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布回怜,位于F島的核電站,受9級特大地震影響换薄,放射性物質(zhì)發(fā)生泄漏玉雾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一轻要、第九天 我趴在偏房一處隱蔽的房頂上張望复旬。 院中可真熱鬧,春花似錦冲泥、人聲如沸驹碍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽志秃。三九已至,卻和暖如春嚼酝,著一層夾襖步出監(jiān)牢的瞬間洽损,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工革半, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人流码。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓又官,卻偏偏與公主長得像,于是被迫代替她去往敵國和親漫试。 傳聞我的和親對象是個殘疾皇子六敬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容