最全jdk性能監(jiān)控命令整理與使用

在java程序運(yùn)行時碉考,我們不僅僅需要關(guān)注基本的功能實現(xiàn)塌计,還需要關(guān)注性能相關(guān)的問題,除了軟件額度相關(guān)功能以外侯谁,性能可以說是衡量軟件優(yōu)劣最重要的指標(biāo)之一锌仅。之前我總結(jié)了一些在linux系統(tǒng)下提供給我們的診斷程序運(yùn)行性能的工具章钾,感興趣的同學(xué)可以去看一下:
https://juejin.im/post/5d71f1e3e51d453c135c5b41

下面主要說的就是jdk自帶提供給我們的用于性能監(jiān)控和進(jìn)行診斷的一些工具,掌握好這些工具的使用热芹,可以讓我們更好的去在實際開發(fā)過程中改善系統(tǒng)的性能問題贱傀,以及出現(xiàn)復(fù)雜的內(nèi)存異常時,能更好的進(jìn)行診斷并解決.

1.查看java進(jìn)程--jps命令

jps命令類似于linux下的ps伊脓,但它只用于列出java的進(jìn)程府寒,直接運(yùn)行的話,不加任何參數(shù)报腔,可以列出java程序程序進(jìn)程id以及Main函數(shù)的名稱株搔。

image

如下示例:

jps -m -l -p
image

其中有一些參數(shù)的含義,例如: -m用于輸出傳輸給java進(jìn)程的參數(shù)纯蛾。

image

-v 可以顯示傳遞給java虛擬機(jī)的參數(shù)

image

2纤房、查看虛擬機(jī)運(yùn)行時命令- jstat(常用)

這個命令可以觀察java應(yīng)用程序運(yùn)行時相關(guān)信息的工具。功能非常強(qiáng)大茅撞,可以利用它查看堆棧信息帆卓。
語法如下:

image

選項option可以由以下值構(gòu)成:

image

-t參數(shù)可以在輸出信息加上一個timeestamp列,顯示程序運(yùn)行的時候米丘。

-h參數(shù)可以在周期性數(shù)據(jù)輸出時剑令,輸出多少行數(shù)據(jù)后,跟著輸出一個表頭的信息拄查。

interval參數(shù)用于指定輸出統(tǒng)計數(shù)據(jù)的周期吁津,單位為毫秒。

count用于指定一個輸出多少次數(shù)據(jù)堕扶。

下面看代碼例子:
例1

jstat -class -t -h1 9876 1000 2
image

在-class的輸出中碍脏,以上表示進(jìn)程9876的classLoad的相關(guān)信息,每秒統(tǒng)計一次信息稍算,一共輸出兩次典尾。每打印一行,輸出頭部信息糊探。

load表示載入類的數(shù)量钾埂,Byte表示載入類的大小,Unload表示卸載類的數(shù)量科平,第二個Byte表示卸載類的大小褥紫。Time表示加載和卸載類上所花的時間。

例2: 查看jit編譯信息

image

以上結(jié)果:
Compiled表示編譯任務(wù)的執(zhí)行的次數(shù)瞪慧,F(xiàn)ailed表示編譯失敗的次數(shù)髓考,Invalid表示編譯不可用的次數(shù),Time表示編譯的總耗時弃酌,F(xiàn)ailedType表示最后一次編譯失敗的類型氨菇,F(xiàn)ailedMethod表示最后一次編譯失敗的類名和方法名儡炼。

例三:查看GC堆的信息。

jstat -gc 9876
image

image

MC:方法區(qū)大小
MU:方法區(qū)使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小

還可以顯示各個年代的信息:

jstat -gccapacity 9876
image

NGCMN:新生代最小容量

NGCMX:新生代最大容量

NGC:當(dāng)前新生代容量

S0C:第一個幸存區(qū)大小

S1C:第二個幸存區(qū)的大小

EC:伊甸園區(qū)的大小

OGCMN:老年代最小容量

OGCMX:老年代最大容量

OGC:當(dāng)前老年代大小

OC:當(dāng)前老年代大小

MCMN:最小元數(shù)據(jù)容量

MCMX:最大元數(shù)據(jù)容量

MC:當(dāng)前元數(shù)據(jù)空間大小

CCSMN:最小壓縮類空間大小

CCSMX:最大壓縮類空間大小

CCSC:當(dāng)前壓縮類空間大小

YGC:年輕代gc次數(shù)

FGC:老年代GC次數(shù)

還可以查看最近一次GC的原因以及當(dāng)前gc的原因:

jstat -gccause 9876
image

LGGC: 上次GC的原因门驾。

GCC: 當(dāng)前GC的原因射赛。

以下整理一些參數(shù)多柑,結(jié)合以上的例子奶是,可以看不同年代的區(qū)的信息
-gcnew : 新生代

-gcnewcapacity 詳細(xì)輸出新生代的各個區(qū)大小信息。

-gcold 展示老年代的gc情況

-gcpacacity 永久區(qū)的使用情況

-gcutil 展示gc回收的相關(guān)信息

查看虛擬機(jī)參數(shù) jinfo(常用)

該命令可以用來查看正在運(yùn)行的java虛擬機(jī)的擴(kuò)展參數(shù)竣灌,甚至支持在運(yùn)行時修改擴(kuò)展參數(shù)聂沙。

語法如下

jinfo <option> <pid>

其中option可以為如下信息:
-flag 打印指定虛擬的參數(shù)值

-flag[+|-]< name >: 指定java虛擬機(jī)參數(shù)的布爾值

-flag< name > 指定java虛擬機(jī)參數(shù)的值

很多情況下,java應(yīng)用程序不會指定所有的虛擬機(jī)的參數(shù)值初嘹,此時及汉,開發(fā)人員可以通過該命令找到虛擬機(jī)參數(shù)的當(dāng)前值。

例如:

jinfo -flag PrintDeatils 9876 -XX:-PrintDetails

jinfo不僅可以查看運(yùn)行時虛擬機(jī)某個參數(shù)的值也可以運(yùn)行時修改部分參數(shù)的值屯烦,并立即生效坷随。

4、導(dǎo)出堆到文件----jmap(常用)

jmap命令可以生成java程序的堆dump文件驻龟,也可以查看堆內(nèi)對象實例的統(tǒng)計信息温眉、查蘭classLoader的信息和finalizer隊列。

1.生成java程序的堆dump文件,得到當(dāng)前堆快照

jmap -dump:format=b,file=c:\heap.hprof 

在生成了堆快照后翁狐,可以通過多種工具分析該堆文件类溢。

2.查看classLoader的信息

jmap -clstats [pid]

3.生成java程序的對象統(tǒng)計信息,并輸出到s.txt文件

jmap -histo [pid] >c:\s.txt

結(jié)果如下:

image

5.jdk自帶的堆分析工具---jhat

可以用于分析java應(yīng)用程序的堆快照內(nèi)容

jhat 堆文件地址

6.查看線程的堆棧---jstack(常用)

用于導(dǎo)出java應(yīng)用程序的線程堆棧

jstack -l <pid>

-l 用于打印鎖的附加信息
運(yùn)行一個死鎖的線程:

image

從信息的最后一行露懒,我們很容易得到死鎖的發(fā)生闯冷,同時找到了死鎖的兩個線程,以及死鎖線程的持有對象和等待對象懈词。

7.遠(yuǎn)程主機(jī)信息收集---jstatd命令

jstatd 是一個RMI服務(wù)端程序蛇耀,作用相當(dāng)于代理服務(wù)器,建立本地計算機(jī)與遠(yuǎn)程監(jiān)控工具的通信坎弯。jstatd服務(wù)器會將本機(jī)的java應(yīng)用程序傳遞到遠(yuǎn)程計算機(jī)


image

直接打開可能會拋出拒絕訪問的異常纺涤,因此需要使用java的安全策略,為其分配權(quán)限荞怒。

image

下面會為jstatd分配最大的權(quán)限洒琢,將其保存在jstatd.all.policy文件中。

image

然后使用如下命令再次開啟jstatd服務(wù)器:

image

就可以開啟成功了褐桌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衰抑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荧嵌,更是在濱河造成了極大的恐慌呛踊,老刑警劉巖砾淌,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谭网,居然都是意外死亡汪厨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門愉择,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劫乱,“玉大人,你說我怎么就攤上這事锥涕≈愿辏” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵层坠,是天一觀的道長殖妇。 經(jīng)常有香客問我,道長破花,這世上最難降的妖魔是什么谦趣? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮座每,結(jié)果婚禮上前鹅,老公的妹妹穿的比我還像新娘。我一直安慰自己尺栖,他們只是感情好嫡纠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著延赌,像睡著了一般除盏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挫以,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天者蠕,我揣著相機(jī)與錄音,去河邊找鬼掐松。 笑死踱侣,一個胖子當(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
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雕憔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年姿骏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斤彼。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡分瘦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出畅卓,到底是詐尸還是另有隱情擅腰,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布翁潘,位于F島的核電站,受9級特大地震影響歼争,放射性物質(zhì)發(fā)生泄漏拜马。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一沐绒、第九天 我趴在偏房一處隱蔽的房頂上張望俩莽。 院中可真熱鬧,春花似錦乔遮、人聲如沸扮超。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽出刷。三九已至,卻和暖如春坯辩,著一層夾襖步出監(jiān)牢的瞬間馁龟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工漆魔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坷檩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓改抡,卻偏偏與公主長得像矢炼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阿纤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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