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

JVM調(diào)優(yōu)工具介紹(1)
對大多數(shù)java開發(fā)從業(yè)人員來說,對jvm進(jìn)行調(diào)優(yōu)是許多java開發(fā)人員必然碰到的難題。工欲善其事必先利其器,給系統(tǒng)定位,知識、經(jīng)驗是關(guān)鍵,但同樣選擇一款趁手適合的工具同樣重要!今天,筆者就根據(jù)自己多年的開發(fā)經(jīng)驗,為大家分享jvm一些調(diào)優(yōu)工具的使用。在開始之前,我們應(yīng)該意識到:工具只是知識技能的延伸。沒有什么工具能包治百病,解決一切問題。
1、? jps:虛擬機(jī)進(jìn)程狀況工具
jps工具是jvm虛擬機(jī)的基礎(chǔ)工具,jvm的虛擬機(jī)基礎(chǔ)工具路徑在java安裝路徑\bin目錄下。jps命令的作用是列出正在運行的虛擬機(jī)進(jìn)程,并顯示虛擬機(jī)執(zhí)行主類(main()方法所在的類)以及這些進(jìn)程本地虛擬機(jī)唯一id(也叫LVMID),工具功能比較單一,但使用頻次確是最高的。因為其他命令需要使用到LVMID。jps命令格式如下:
jps {options} {host id}
沒有啟動eclipse或idea默認(rèn)jvm進(jìn)程示例如下圖(1):

啟動jvm進(jìn)程示例如下圖(2):

解釋:52020為啟動類com.xia.jvm.study.chapter4.JVMUtilsTest的進(jìn)程id。79364為eclipse開發(fā)工具的id。
jps常用的參數(shù)如下:
①、-q,只輸出LVMID,不輸出主類的參數(shù),如圖(3)所示;②、-m:輸出虛擬機(jī)啟動時的參數(shù),如圖(4)所示;③、-l:輸出主類的全名,如果執(zhí)行的是jar包,則輸出jar全路徑。如圖(2)所示;④、-v:輸出虛擬機(jī)啟動時的jvm參數(shù),如圖(5)所示;



2、? 虛擬機(jī)統(tǒng)計信息監(jiān)視工具
jstat(JVM Statistics Monitoring Tool)是用于監(jiān)視jvm各種運行狀態(tài)信息,它可以顯示jvm進(jìn)程中類加載、內(nèi)存、垃圾回收、即時編譯器等運行時數(shù)據(jù)。jstat命令格式如下:
jstat [option vmid [interval[s|ms] [count]] ]
vmid是指本地虛擬機(jī)id,如果是遠(yuǎn)程的vmid的格式為:[protocal:][//]lvmid[@hostname[:port]/servername]。
參數(shù)interval和count表示查詢間隔和查詢次數(shù)。示例如圖(6)所示:

其中:-gc表示垃圾回收操作;860表示正在運行的jvmid,300表示每隔300毫秒查詢一次,10000表示一共查詢10000次。返回參數(shù)含義如下:
S0C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第一個survivor的容量(KB)
S1C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第二個survivor的容量(KB)
S0U? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第一個survivor已經(jīng)使用的容量(KB)
S1U? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第二個survivor已經(jīng)使用的容量(KB)
EC? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Eden區(qū)的容量(KB)
EU? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Eden區(qū)已經(jīng)使用的容量(KB)
OC? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?老年代的容量(KB)
OU? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 老年代已經(jīng)使用的容量(KB)
MC? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 元空間的容量(KB)
MU? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 元空間已經(jīng)使用的容量(KB)
CCSC? ? ? ? ? ? ? ? ? ? ? ? ?壓縮類的容量(KB)
CCSU? ? ? ? ? ? ? ? ? ? ? ? ?壓縮類已經(jīng)使用的容量(KB)
YGC? ? ? ? ? ? ? ? ? ? ? ? ? ? 年輕代垃圾收集的次數(shù)
YGCT? ? ? ? ? ? ? ? ? ? ? ? ? 年輕代垃圾收集消耗時間
FGC? ? ? ? ? ? ? ? ? ? ? ? ? ? 老輕代垃圾收集的次數(shù)
FGCT? ? ? ? ? ? ? ? ? ? ? ? ?老輕代垃圾收集消耗時間
GCT? ? ? ? ? ? ? ? ? ? ? ? ? ?垃圾收集消耗總時間
jstat常見的參數(shù)可以分為三類:類加載、垃圾收集、運行期編譯狀況,主要有:
-class
監(jiān)視類加載、卸載數(shù)量、總空間以及類裝載所耗費的時間。
-gc
表示java的堆信息,包括Eden區(qū)、survivor區(qū)域、老年代、永久代等的容量信息,已用空間,垃圾收集時間合計信息。
-gccapacity
監(jiān)視內(nèi)容基本和gc相同,但是輸出主要關(guān)注在java堆各區(qū)域使用到的最大空間和最小空間。
-gcutil
監(jiān)視內(nèi)容基本和gc相同,但是輸出主要關(guān)注已使用空間和占總空間的百分比。
-gccause
和gcutil功能一樣,但是會額外輸出導(dǎo)致上一次垃圾收集產(chǎn)生的原因。
-gcnew
新生代垃圾收集情況。
-gcnewcapacity
和gcnew功能一樣,但是輸出主要關(guān)注使用到的最大空間和最小空間。
-gcold
老生代垃圾收集情況。
-gcoldcapacity
和gcold功能一樣,但是輸出主要關(guān)注使用到的最大空間和最小空間。
-gcpremcapacity
輸出永久代使用到的最大空間和最小空間。
-compiler
即時編譯器編譯過的方法、耗時等信息。
-printcompilation
已經(jīng)被即時編譯過的方法。
雖然jvm調(diào)優(yōu)已經(jīng)是JMC、VisualVM等可是化工具的天下,但在實際生產(chǎn)環(huán)境中,jstat命令依然占有一席之地。