3.JVM調(diào)優(yōu)工具

JVM調(diào)優(yōu)工具

1丙躏、JVM調(diào)優(yōu)工具-JDK工具

1.1 jps

jps:Java Virtual Machine Process Status Tool

查看java進(jìn)程哲嘲,相當(dāng)于Linux下的ps命令嫌变,只不過(guò)它只能列出Java進(jìn)程

jps:列出Java程序進(jìn)程的ID和Main函數(shù)名稱(chēng)
jps -q: 只輸出集成ID
jps -m: 輸出傳遞給Java進(jìn)程(主函數(shù))的參數(shù)
jps -l: 輸出主函數(shù)的完整路徑
jps -v: 顯示傳遞給Java虛擬的參數(shù)
image.png

1.2 jstat

jstat:JVM Statistics Monitoring Tool jvm信息統(tǒng)計(jì)監(jiān)控工具

jstat可以查看Java程序運(yùn)行時(shí)相關(guān)信息响禽,可以通過(guò)它查看堆信息的相關(guān)情況

jstat -<option> [-t] [-h<lines>] <vmid> [<interval>] [<count>]
options:由以下值構(gòu)成
-  class (類(lèi)加載器) 
-  compiler (JIT) 
-  gc (GC堆狀態(tài)) 
-  gccapacity (各區(qū)大小) 
-  gccause (最近一次GC統(tǒng)計(jì)和原因) 
-  gcnew (新區(qū)統(tǒng)計(jì))
-  gcnewcapacity (新區(qū)大小)
-  gcold (老區(qū)統(tǒng)計(jì))
-  gcoldcapacity (老區(qū)大小)
-  gcpermcapacity (永久區(qū)大小)
-  gcutil (GC統(tǒng)計(jì)匯總)
-  printcompilation (HotSpot編譯統(tǒng)計(jì))
-  interval(用于指定輸出統(tǒng)計(jì)數(shù)據(jù)的周期俩滥,單位是毫秒)
-  count(用于指定一個(gè)輸出多少次數(shù)據(jù))

示例1

下面輸出的GC信息嘉蕾,10416:進(jìn)程ID 250:250毫秒 4:采樣本數(shù)為4次

jstat -gc 10416 250 4 
image.png
具體描述
S0C:年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
S1C:年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
S0U:年輕代中第一個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
S1U:年輕代中第二個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
EC :年輕代中Eden(伊甸園)的容量 (字節(jié))
EU :年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
OC :Old代的容量 (字節(jié))
OU :Old代目前已使用空間 (字節(jié))
PC :Perm(持久代)的容量 (字節(jié))
PU :Perm(持久代)目前已使用空間 (字節(jié))
YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
YGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c所用時(shí)間(s)
FGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
FGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
GCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)

示例2

jstat -calss 10416
image.png
具體描述:
loaded:已經(jīng)裝在的類(lèi)的數(shù)量
Bytes :裝載類(lèi)所占用的字節(jié)數(shù)
Unloaded:已經(jīng)卸載類(lèi)的數(shù)量
Bytes:卸載類(lèi)的字節(jié)數(shù)

示例3

jstat -gcutil 10416 5s 5
image.png

1.3 jinfo

jinfo:Java configuration info
jinfo可以用來(lái)查看正在運(yùn)行的java程序的擴(kuò)展參數(shù),甚至支持運(yùn)行時(shí)霜旧,修改部分參數(shù)

jinfo [option] <pid>

1.4 jmap

jmap:Java Memory Map
jmap用來(lái)查看堆內(nèi)存使用狀況错忱,一般結(jié)合jhat使用

示例1 heap

命令:jmap -heap pid
描述:顯示Java堆詳細(xì)信息
打印一個(gè)堆的摘要信息,包括使用的GC算法挂据、堆配置信息和各內(nèi)存分配情況

示例2 histo[:live]

命令:jmap -histo:live pid
描述:顯示堆中對(duì)象的統(tǒng)計(jì)信息
其中包括每個(gè)Java類(lèi)以清、對(duì)象數(shù)量、內(nèi)存大衅樘印(單位:字節(jié))掷倔、完全限定的類(lèi)名。打印的虛擬機(jī)內(nèi)部的類(lèi)名稱(chēng)將會(huì)帶有一個(gè)*前綴个绍,如果ja 指定了live子選項(xiàng)勒葱,則只計(jì)算活動(dòng)的對(duì)象

示例3 clstats

命令:jmap -clstats pid
描述:打印類(lèi)加載器信息

示例4 finalizerinfo

命令:jmap -finalizerinfo pid
描述:打印等待終結(jié)的對(duì)象信息

示例5 dump 結(jié)合下面的jhat使用

命令:jmap -dump:format=b,file=heapdump.phrof pid
描述:生成堆轉(zhuǎn)儲(chǔ)快照dump文件

注意
phrof二進(jìn)制格式轉(zhuǎn)儲(chǔ)指定filename的文件中。live子選項(xiàng)是可選的巴柿,如果指定了live子選項(xiàng)凛虽,堆中只有活動(dòng)的對(duì)象會(huì)被轉(zhuǎn)儲(chǔ)。想要瀏覽heap dump广恢,你可以使用jhat(java堆分析工具)讀取生成的文件
這個(gè)命令執(zhí)行凯旋,jvm會(huì)將整個(gè)heap的信息dump寫(xiě)入到一個(gè)文件,heap如果比較大的話钉迷,就會(huì)導(dǎo)致這個(gè)過(guò)程比較耗時(shí)至非,并且執(zhí)行的過(guò)程中為了保證dump的信息是可靠的,所以會(huì)暫停應(yīng)用糠聪,線上系統(tǒng)慎用

1.5 jhat

jhat:java Heap Analysis Tool ,jhat命令解析ajva對(duì)轉(zhuǎn)儲(chǔ)文件睡蟋,并啟動(dòng)一個(gè)web server。然后用瀏覽器來(lái)查看瀏覽dump出來(lái)的heap枷颊。jhat 命令支持預(yù)先設(shè)計(jì)的查詢(xún),比如顯示某個(gè)類(lèi)的所有實(shí)例。還支持查詢(xún)語(yǔ)言(OQL Obejct Query Language)夭苗。OQL有點(diǎn)類(lèi)似Sql信卡,專(zhuān)門(mén)用來(lái)查詢(xún)堆轉(zhuǎn)儲(chǔ)。OQL相關(guān)的幫助信息可以在jhat命令所提供的服務(wù)器頁(yè)面最底部题造,如果使用默認(rèn)端口傍菇,則OQL幫助信息頁(yè)面為:http://localhost:7000/oqlhelp/

1.6 jstack

命令:jstack -l pid > jstack_info.txt

jstack:java Stack Trace,jstack是Java虛擬機(jī)只帶的一種堆棧跟蹤工具界赔。jstack用于生產(chǎn)java虛擬機(jī)當(dāng)前時(shí)刻的線程快照丢习。線程快照是當(dāng)前Java虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長(zhǎng)時(shí)間停頓的原因淮悼,如線程間死鎖咐低、死循環(huán)、請(qǐng)求外部資源導(dǎo)致的長(zhǎng)時(shí)間等待等袜腥。線程出現(xiàn)停頓的時(shí)候通過(guò)jstack來(lái)查看各個(gè)線程的調(diào)用堆棧见擦,就可以知道沒(méi)有相應(yīng)的線程到底在后臺(tái)做什么事情,或者等待什么資源羹令。如果Java程序崩潰生成core文件鲤屡,jstack工具可以用來(lái)獲得core文件的java stack和natice stack的信息,從而可以輕松的知道java程序是如何崩潰和在程序何處發(fā)生問(wèn)題福侈,另外酒来,jstack工具還可以附屬到正在運(yùn)行的java程序中,看到當(dāng)時(shí)運(yùn)行的java程序的java stack和native stack的信息肪凛,如果現(xiàn)在運(yùn)行的java程序呈現(xiàn)hung的狀態(tài)堰汉,jstack是非常有用的。

在thread dump中显拜,要留意下面幾種狀態(tài)

  • 死鎖衡奥,DeadLock(重點(diǎn)關(guān)注)

  • 等待資源 Waiting on condition(重點(diǎn)關(guān)注)

  • 等待獲取監(jiān)視器 Waiting on monitor entrty(重點(diǎn)關(guān)注)

  • 阻塞 Blocked(重點(diǎn)關(guān)注)

  • 執(zhí)行中 Runnable

  • 暫停 Suspended

  • 對(duì)象等待中 Object.wait()或TIMED_WAITING

  • 停止 Parked

示例1

統(tǒng)計(jì)線程數(shù)
jstack -l pid |grep 'java.lang.Thread.State' | wc -l

1.7 jconsole

jconsole:Java Monitoring and Management Console,Java 5引入远荠,一個(gè)內(nèi)置Java性能分析器矮固,可以從命令行或者GUI Shell中運(yùn)行∑┐荆可以輕松地使用Jconsole來(lái)監(jiān)控Java應(yīng)用程序性能和跟蹤Java中的代碼
如何啟動(dòng)Jconsole
如果是命令行啟動(dòng)档址,使用JDK在PATH上,運(yùn)行jconsole即可
如果在GUI Shell啟動(dòng)邻梆,找到JDK安裝路徑守伸,打開(kāi)bin目錄,雙擊jconsole

當(dāng)分析工具彈出時(shí)(取決于正在運(yùn)行的java版本以及正在運(yùn)行的java程序數(shù)量)浦妄,可能會(huì)出現(xiàn)一個(gè)對(duì)話框尼摹,要求輸入一個(gè)進(jìn)程的URL來(lái)連接见芹,也可能累出許多不同的本地java進(jìn)程(有時(shí)包含jconsole進(jìn)程本身)來(lái)連接。如下圖所示:想分析哪個(gè)進(jìn)程就雙擊哪個(gè)進(jìn)程

1.8 hprof

hprof:Heap/CPU profiling Tool 能夠展現(xiàn)CPU使用率蠢涝,統(tǒng)計(jì)堆內(nèi)存使用情況

JVM調(diào)優(yōu)工具-Linux工具

2.1 top

Linux中的top命令顯示系統(tǒng)上正在運(yùn)行的進(jìn)程玄呛,他是系統(tǒng)管理員最重要的工具之一,被廣泛用于監(jiān)視服務(wù)器的負(fù)載和二。top命令是一個(gè)交互命令徘铝,在運(yùn)行top的時(shí)候還可以運(yùn)行很多命令
top的使用方式 top [-d number] | top [-bnp]

top:顯示進(jìn)程信息
top -c : 顯示完整命令
top -b :以批處理模式顯示程序信息
 : 以累計(jì)模式顯示程序信息
 

2.2 vmstat

Virtual Meomory Statisctics (虛擬內(nèi)存統(tǒng)計(jì)),可對(duì)炒作系統(tǒng)的虛擬內(nèi)存惯吕、進(jìn)程惕它、CPU活動(dòng)進(jìn)行監(jiān)控

vmstat 3 每三秒監(jiān)控一次

2.3 iostat

需要安裝

2.4 pidstat

需要安裝

JVM調(diào)優(yōu)工具-第三方工具

3.1 VisualVM

需要手動(dòng)安裝對(duì)應(yīng)插件

3.2 MAT

Memory Analyzer Tool

eclipse或idea上可以下載插件。有時(shí)候dump文件太大的話废登,可以下載LInux的MAT淹魄。

3.3 GCWviewer

3.4 Arthas

alibaba開(kāi)源的java診斷工具,下載jar包钳宪,然后運(yùn)行揭北。

3.5 GChisto

3.6 IBM HeapAnalyzer

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吏颖,隨后出現(xiàn)的幾起案子搔体,更是在濱河造成了極大的恐慌,老刑警劉巖半醉,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疚俱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缩多,警方通過(guò)查閱死者的電腦和手機(jī)呆奕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)衬吆,“玉大人梁钾,你說(shuō)我怎么就攤上這事⊙仿眨” “怎么了姆泻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)冒嫡。 經(jīng)常有香客問(wèn)我拇勃,道長(zhǎng),這世上最難降的妖魔是什么孝凌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任方咆,我火速辦了婚禮,結(jié)果婚禮上蟀架,老公的妹妹穿的比我還像新娘瓣赂。我一直安慰自己榆骚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布钩述。 她就那樣靜靜地躺著寨躁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牙勘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天所禀,我揣著相機(jī)與錄音方面,去河邊找鬼。 笑死色徘,一個(gè)胖子當(dāng)著我的面吹牛恭金,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褂策,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼横腿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了斤寂?” 一聲冷哼從身側(cè)響起耿焊,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遍搞,沒(méi)想到半個(gè)月后罗侯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溪猿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年钩杰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诊县。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡快集,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稽鞭,到底是詐尸還是另有隱情齐苛,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布抗悍,位于F島的核電站驹饺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缴渊。R本人自食惡果不足惜赏壹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衔沼。 院中可真熱鬧蝌借,春花似錦昔瞧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至稍坯,卻和暖如春酬荞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞧哟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工混巧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勤揩。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓咧党,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親陨亡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子傍衡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355