深入理解java虛擬機讀書筆記抹恳,第四章:虛擬機性能監(jiān)控與故障處理

4.1概述

定位問題员凝,知識、經(jīng)驗是關(guān)鍵基礎(chǔ)奋献,數(shù)據(jù)是依據(jù)健霹,工具是運用知識處理數(shù)據(jù)的手段

數(shù)據(jù)包含:運行日志旺上、異常堆棧、GC日志糖埋、線程快照(threaddump/javacore文件)宣吱、堆轉(zhuǎn)儲快照(heapdump/hprof文件)


jdk的bin路徑下用于監(jiān)視虛擬機和故障處理的工具

工具都特別小,是jdk/lib/tools.jar的包裝

借助tools.jar接口瞳别,在程序中實現(xiàn)強大的監(jiān)控分析功能


4.2JDK命令行工具

4.2.1jps(JVM process status tool)

虛擬機進(jìn)程狀況工具

列出虛擬機進(jìn)程征候、顯示虛擬機執(zhí)行主類名稱、這些進(jìn)程的本地虛擬機唯一ID(local virtual machine identifier)

對于本地虛擬機祟敛,LVMID和進(jìn)程ID(Process identifier疤坝,PID)一致

如果同時啟動多個虛擬機,無法根據(jù)進(jìn)程名稱定位垒棋,就需要依賴jps的查看主類的功能才能區(qū)分


工具選項說明

q:只顯示LVMID卒煞,省略主類的名稱

m:輸出虛擬機啟動時傳遞給主類main()函數(shù)的參數(shù)

l:輸出主類的全名,如果進(jìn)程執(zhí)行的是jar包叼架,輸出jar路徑

v:輸出虛擬機進(jìn)程啟動時JVM參數(shù)

4.2.2jstat(JVM statistics monitoring tool)

虛擬機統(tǒng)計信息監(jiān)視工具

用于監(jiān)視虛擬機各種運行狀態(tài)信息

顯示本地或遠(yuǎn)程虛擬機進(jìn)程中類裝載畔裕、內(nèi)存、垃圾收集乖订、JIT編譯的動態(tài)數(shù)據(jù)

對于本地虛擬機進(jìn)程扮饶,VMID和LVMID一致

對于遠(yuǎn)程虛擬機,VMID格式為[protocol:][//] lvmid [@hostname:[port]/servername]

interval和count代表運行的間隔和次數(shù)

option代表希望查詢的虛擬機信息乍构,主要分為類裝載甜无、垃圾收集、運行期編譯狀況


工具選項說明

-class:監(jiān)視類裝載哥遮、卸載數(shù)量岂丘、總空間以及類裝載耗費的時間

-gc:監(jiān)視java堆狀況,包含Eden區(qū)眠饮、兩個survivor區(qū)奥帘、老年代、永久帶的容量仪召、已用空間寨蹋、GC時間合計信息等

-gccapacity:監(jiān)視內(nèi)容和-gc基本相同,輸出主要關(guān)注各個區(qū)域使用到的最大扔茅、最小空間

-gcutil:監(jiān)視內(nèi)容和-gc基本相同已旧,輸出主要關(guān)注已用空間的占比

-gccause:和gcutil一樣,會額外輸出導(dǎo)致上一次gc的原因

-gcnew:監(jiān)視新生代gc狀況

-gcnewcapacity:和-gcnew基本相同召娜,主要關(guān)注使用到的最大运褪、最小空間

-gcold:監(jiān)視老年代gc狀況

-gcoldcapacity:和-gcold基本相同,主要關(guān)注使用到的最大、最小空間

-gcpermcapacity:輸出永久代使用的最大秸讹、最小空間

-compiler:輸出JIT編譯器編譯過的方法胁后、耗時等信息

-printcompilation:輸出已經(jīng)被JIT編譯過的方法

4.2.3jinfo(Configuration info for java)

java配置信息工具

實時的查看和調(diào)整虛擬機參數(shù)

查看虛擬機啟動時未被顯式指定的系統(tǒng)默認(rèn)值,用jinfo的-flag

4.2.4jmap(Memory map for java)

Java內(nèi)存映像工具

生成堆轉(zhuǎn)儲快照(一般稱為heapdump或dump文件)

查詢finalize執(zhí)行隊列

java堆和永久代的詳細(xì)信息嗦枢,如空間使用率攀芯、當(dāng)前用的哪種收集器

工具選項說明

4.2.5jhat(JVM heap analysis Tool)

java堆轉(zhuǎn)儲快照分析工具

jhat內(nèi)置微型http/html服務(wù)器,生成dump文件的分析結(jié)果后文虏,可以在瀏覽器查看

一般不會直接用jhat命令分析dump

一般不會直接在部署的服務(wù)器上直接分析dump文件侣诺,分析耗時、消耗硬件資源

分析功能比較簡陋

一般用virtualVM氧秘、Eclipse Memory analyzer年鸳、IBM HeapAnalyzer

4.2.6jstack(Stack Trace for java)

java堆棧跟蹤工具

生成虛擬機當(dāng)前時刻的線程快照(一般稱為threaddump或者javacore文件)

線程快照就是每一個線程執(zhí)行的方法堆棧的集合

定位線程長時間停頓的原因,如線程死鎖丸相、死循環(huán)搔确、請求外部資源導(dǎo)致的長時間等待

工具選項說明

4.2.7hsdis:JIT生成代碼反匯編

作用是讓Hotspot的-XX:printAssembly指令調(diào)用它來把動態(tài)生成的的本地代碼還原為匯編代碼輸出,同時生成大量有價值的注釋

4.3JDK的可視化工具

4.3.1Jconsole:java監(jiān)視與管理控制臺

一款基于JMX的可視化監(jiān)視灭忠、管理工具

管理部分的功能是針對JMX Mbean進(jìn)行管理

Mbean可以通過代碼膳算、中間服務(wù)器的管理控制臺、或所有符合JMX規(guī)范的軟件訪問


監(jiān)視

1啟動:JDK/bin下的jconsole.exe,自動搜索虛擬機進(jìn)程弛作,不需要jps來查詢

2.內(nèi)存監(jiān)控:相當(dāng)于可視化的jstat涕蜂,用于監(jiān)視受收集器管理的虛擬機內(nèi)存(Java堆和永久代)的變化趨勢

3線程監(jiān)控:相當(dāng)于可視化的jstack,查看線程停頓的原因映琳,例如等待外部資源机隙、死循環(huán)、鎖等待

4.3.2:virtualVM:多合一故障處理

All-in-one java troubleshooting tool

運行監(jiān)視萨西、故障處理有鹿、性能分析

兼容范圍與插件安裝


通過插件擴展,virtualVM可以做到功能

顯示虛擬機的進(jìn)程以及進(jìn)程配置谎脯、環(huán)境信息(jps葱跋、jinfo)

監(jiān)視應(yīng)用程序的CPU、GC穿肄、堆年局、方法區(qū)以及線程的信息(jstat际看、jstack)

dump以及分析堆轉(zhuǎn)儲快照(jmap咸产、jhat)

方法級的程序運行性能分析,找出調(diào)用最多仲闽、運行時間最長的方法

離線程序快照脑溢,收集程序運行時配置、線程dump、內(nèi)存dump等信息建立一個快照

其他plugin無限可能性...

生成屑彻、瀏覽堆轉(zhuǎn)儲快照

分析程序性能

做profiling分析對程序性能影響較大验庙,在生產(chǎn)環(huán)境一般不會用這些功能

BTrace動態(tài)日志跟蹤

在不停止目標(biāo)程序的前提下,通過Hotspot虛擬機的HotSwap技術(shù)動態(tài)加入原本并不存在的調(diào)試代碼

HotSwap技術(shù):代碼熱替換技術(shù)社牲,HotSpot虛擬機允許在不停止運行的情況下粪薛,更新已經(jīng)加載的類的代碼




參考文獻(xiàn):

[1] 深入理解Java虛擬機 第二版 --周志明


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搏恤,隨后出現(xiàn)的幾起案子违寿,更是在濱河造成了極大的恐慌,老刑警劉巖熟空,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藤巢,死亡現(xiàn)場離奇詭異,居然都是意外死亡息罗,警方通過查閱死者的電腦和手機掂咒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迈喉,“玉大人绍刮,你說我怎么就攤上這事“っ” “怎么了录淡?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長油坝。 經(jīng)常有香客問我嫉戚,道長,這世上最難降的妖魔是什么澈圈? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任彬檀,我火速辦了婚禮,結(jié)果婚禮上瞬女,老公的妹妹穿的比我還像新娘窍帝。我一直安慰自己,他們只是感情好诽偷,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布坤学。 她就那樣靜靜地躺著,像睡著了一般报慕。 火紅的嫁衣襯著肌膚如雪深浮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天眠冈,我揣著相機與錄音飞苇,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛布卡,可吹牛的內(nèi)容都是我干的雨让。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忿等,長吁一口氣:“原來是場噩夢啊……” “哼栖忠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贸街,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤娃闲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匾浪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皇帮,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年蛋辈,在試婚紗的時候發(fā)現(xiàn)自己被綠了属拾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡冷溶,死狀恐怖渐白,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逞频,我是刑警寧澤纯衍,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站苗胀,受9級特大地震影響襟诸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜基协,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一歌亲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澜驮,春花似錦陷揪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耐量,卻和暖如春飞蚓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拴鸵。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工玷坠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劲藐。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓八堡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親聘芜。 傳聞我的和親對象是個殘疾皇子兄渺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 一. jps : 虛擬機進(jìn)程狀況工具 功能:列出正在運行的虛擬機進(jìn)程,并顯示虛擬機執(zhí)行主類(Main Class,...
    煙雨_任平生閱讀 531評論 0 0
  • 美狄亞是古希臘悲劇作家歐里庇得斯的劇作《美狄亞》的主人公,是世界上第一部表現(xiàn)婦女悲劇的作品汰现。作為科爾喀斯國王埃厄忒...
    周子嵐閱讀 1,092評論 0 2
  • 生活現(xiàn)實而殘酷挂谍,能將一個人改變的面目全非。 前日瞎饲,跟一個很久未見的朋友吃飯口叙,聊天敘舊,恍惚間嗅战,感覺彼此隔著很遠(yuǎn)妄田。 ...
    梨落2016閱讀 283評論 0 0
  • 《查理九世》的第二本是《恐怖的巫女面具》。我花了一天的時間把這一本讀完了驮捍。 書中多多把林警察當(dāng)成了林巫女疟呐,因為她和...
    Jackie_牛閱讀 597評論 0 2