JVM性能監(jiān)控工具

** 本文中使用到的JDK 為 Oracle JDK 1.7 **

JDK本身提供了很多方便的JVM性能調優(yōu)監(jiān)控工具侨嘀,除了jps、jstat起惕、jinfo柜与、jmap、jhat悄蕾、jstack等小巧的工具湾揽,還有集成式的jvisualvm和jconsole。

這些工具在 $JAVA_HOME/bin目錄下:

jvm_tools.png

jps

jps(JVM Process Status Tool笼吟,虛擬機進程監(jiān)控工具),這個命令可以列出正在運行的虛擬機進程霸旗,并顯示虛擬機執(zhí)行主類名稱贷帮,以及這些進程的本地虛擬機唯一ID。這個ID被稱為本地虛擬機唯一ID(local virtual Machine Identifier诱告,簡寫為LVMID)撵枢。如果你在linux的一臺服務器上使用jps得到的LVMID其實就是和ps 命令得到的PID是一樣的。

語法格式如下:

jps [options] [hostid]

如果不指定hostid就默認為當前主機或服務器精居。

jps_usage.png

options參數(shù)選項說明如下:

-q 不輸出類名锄禽、Jar名和傳入main方法的參數(shù)
-m 輸出傳入main方法的參數(shù)
-l 輸出main類或Jar的全限名
-v 輸出傳入JVM的參數(shù)

使用

1、查看所有java進程

jps -lv
jps.png

jinfo

jinfo (Configuration Info for Java靴姿,配置信息工具)
這個命令可以實時地查看和調整虛擬機各項參數(shù)沃但。

主要參數(shù)如下:


jinfo_usage.png

使用

1、查看2788的MaxPerm大小可以用

 jinfo -flag MaxPermSize 2788

輸出結果:
[root@Bill-8 bin]# jinfo -flag MaxPermSize 577
-XX:MaxPermSize=134217728

jhat

jhat(虛擬機堆轉儲快照分析工具)佛吓,這個工具是用來分析jmap dump出來的文件宵晚。
由于這個工具功能比較簡陋垂攘,運行起來也比較耗時,所以這個工具不推薦使用淤刃,推薦使用MAT晒他。

例如分析dump出來的test.bin,命令如下:

jhat test.bin 

它會在本地啟動一個web服務逸贾,端口是7000陨仅,這樣直接訪問 127.0.0.1:7000就能看到分析結果了。

jmap

jmap(Memory Map for Java铝侵,內存映像工具)灼伤,用于生成堆轉存的快照,一般是heapdump或者dump文件哟沫。如果不適用jmap命令饺蔑,可以使用-XX:+HeapDumpOnOutOfMemoryError參數(shù),當虛擬機發(fā)生內存溢出的時候可以產生快照嗜诀』或者使用kill -3 pid也可以產生。jmap的作用并不僅僅是為了獲取dump文件隆敢,它可以查詢finalize執(zhí)行隊列发皿,java堆和永久代的詳細信息,如空間使用率拂蝎,當前用的哪種收集器穴墅。

jmap的命令格式:

jmap [option] vmid

主要參數(shù)如下:

jmap_usage.png

option參數(shù)說明:

  • -dump:[live,]format=b,file=<filename> 使用hprof二進制形式,輸出jvm的heap內容到文件=. live子選項是可選的,假如指定live選項,那么只輸出活的對象到文件.
  • -finalizerinfo 打印正等候回收的對象的信息.
  • -heap 打印heap的概要信息温自,GC使用的算法玄货,heap的配置及wise heap的使用情況.
  • -histo[:live] 打印每個class的實例數(shù)目,內存占用,類全名信息. VM的內部類名字開頭會加上前綴”*”. 如果live子參數(shù)加上后,只統(tǒng)計活的對象數(shù)量.
  • -permstat 打印classload和jvm heap長久層的信息. 包含每個classloader的名字,活潑性,地址,父classloader和加載的class數(shù)量. 另外,內部String的數(shù)量和占用內存數(shù)也會打印出來.
  • -F 強迫.在pid沒有相應的時候使用-dump或者-histo參數(shù). 在這個模式下,live子參數(shù)無效.
  • -h | -help 打印輔助信息
  • -J 傳遞參數(shù)給jmap啟動的jvm.

64位機上使用需要使用如下方式:

jmap -J-d64 -heap pid

使用

1、打印每個class的實例數(shù)目,內存占用,類全名信息

jmap -histo 577

2悼泌、dump heap內容到文件

jmap -dump:format=b,file=test.bin 577
jmap_dump.png

jstat

jstat(JVM Statistics Monitoring Tool松捉,虛擬機統(tǒng)計信息監(jiān)視工具),這個命令用于監(jiān)視虛擬機各種運行狀態(tài)信息馆里。它可以顯示本地或者遠程虛擬機進程中的類裝載隘世、內存、垃圾收集鸠踪、JIT編譯等運行數(shù)據丙者,雖然沒有GUI圖形界面,只是提供了純文本控制臺環(huán)境的服務器上营密,但它是運行期間定位虛擬機性能問題的首選工具械媒。
語法格式如下:

jstat [option vmid [interval [s | ms] [count ] ] ]
jstat_usage.png

vmid是Java虛擬機ID,在Linux/Unix系統(tǒng)上一般就是進程ID评汰。interval是采樣時間間隔滥沫。count是采樣數(shù)目侣集。

jstat的參數(shù)說明如下(截圖來自周志明的《深入理解Java虛擬機 第二版》):


jstat.png

使用

例如:需要每250毫秒查詢一次進程2849 垃圾收集狀況,一共查詢20次兰绣,那命令如下:

jstat -gc 2849 250 20
jstat_gc.png

jstack

jstack(Java Stack Trace世分,Java堆棧跟蹤工具),這個命令用于查看虛擬機當前時刻的線程快照(一般是threaddump 或者 javacore文件)缀辩。線程快照就是當前虛擬機內每一條線程正在執(zhí)行的方法堆棧的集合臭埋。生成線程快照的主要目的是定位線程出現(xiàn)長時間停頓的原因,入線程間死鎖臀玄、死循環(huán)瓢阴、請求外部資源導致的長時間等待都是導致線程長時間停頓的常見原因。線程出現(xiàn)停頓的時候通過jstack來查看各個線程的調用堆棧健无,就可以知道沒有響應的線程到底在后臺做些什么事情荣恐。

命令格式:

jstack [option] vmid

主要的option如下:

jstack_usage.png

使用

1、查看進程2849 的堆棧信息

[root@Bill-8 yrd_soft]# jstack 2849
jstack.png

jconsole

jconsole:一個java GUI監(jiān)視工具累贤,可以以圖表化的形式顯示各種數(shù)據叠穆。并可通過遠程連接監(jiān)視遠程的服務器VM。用java寫的GUI程序臼膏,用來監(jiān)控VM硼被,并可監(jiān)控遠程的VM,非常易用渗磅,而且功能非常強嚷硫。命令行里打 jconsole,選則進程就可以了始鱼。

啟動:


jconsole.png

概覽


jconsole_overview.png

內存


jconsole_memory.png

線程:


jconsole_thread.png

類:


jconsole_class.png

VM概要:

jconsole_vm.png

jvisualvm

jvisualvm同jconsole都是一個基于圖形化界面的仔掸、可以查看本地及遠程的JAVA GUI監(jiān)控工具,Jvisualvm同jconsole的使用方式一樣医清,直接在命令行打入jvisualvm即可啟動起暮,jvisualvm界面更美觀一些,數(shù)據更實時:

jvisualvm.png

監(jiān)控:


jvisualvm_monitor.png

線程監(jiān)控:


jvisualvm_thread.png

參考資料

周志明 《深入理解Java虛擬機 第二版》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末状勤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子双泪,更是在濱河造成了極大的恐慌持搜,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焙矛,死亡現(xiàn)場離奇詭異葫盼,居然都是意外死亡,警方通過查閱死者的電腦和手機村斟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門贫导,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛猫,“玉大人,你說我怎么就攤上這事孩灯」虢穑” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵峰档,是天一觀的道長败匹。 經常有香客問我,道長讥巡,這世上最難降的妖魔是什么掀亩? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮欢顷,結果婚禮上槽棍,老公的妹妹穿的比我還像新娘。我一直安慰自己抬驴,他們只是感情好炼七,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怎爵,像睡著了一般特石。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鳖链,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天姆蘸,我揣著相機與錄音,去河邊找鬼芙委。 笑死逞敷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的灌侣。 我是一名探鬼主播推捐,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼侧啼!你這毒婦竟也來了牛柒?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痊乾,失蹤者是張志新(化名)和其女友劉穎皮壁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哪审,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蛾魄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滴须。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡舌狗,死狀恐怖,靈堂內的尸體忽然破棺而出扔水,到底是詐尸還是另有隱情痛侍,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布铭污,位于F島的核電站恋日,受9級特大地震影響,放射性物質發(fā)生泄漏嘹狞。R本人自食惡果不足惜岂膳,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磅网。 院中可真熱鬧谈截,春花似錦、人聲如沸涧偷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽燎潮。三九已至喻鳄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間确封,已是汗流浹背除呵。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爪喘,地道東北人颜曾。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像秉剑,于是被迫代替她去往敵國和親泛豪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容