天天看點

JDK調優工具的研究

JVM 調優工具研究

JDK自帶了一系列的工具,一般可用于JVM的調優實踐,這裡做一個研究。

1、jps

jps工具可以檢視到目前機器上運作的Java程式的JVM程序id,這個id通常是後續其他工具使用的基礎。另外,jps工具還有一些其他的參數,可以

允許我們檢視到Java程式的啟動參數和目前JVM的啟動參數。

exp:

# jps

8636 QuorumPeerMain

3497 Bootstrap

2486 Jps

參數: -l 顯示目前java啟動類的全程

-v 顯示JVM執行個體的啟動參數

-m 顯示java程式的啟動參數

2、jstat

jstat工具可以檢視到指定JVM執行個體的記憶體使用情況,如新生代、老年代等的gc情況。

參數詳解: jstat -option vmid interval

vmid 是jps查到的JVM執行個體的id

interval 是連續執行的間隔時間,可選參數,不填将隻執行一次

-option 是啟動參數,指定jstat指令顯示哪些資訊

-gcutil 最常用的指令了,可以檢視各個記憶體部分的使用情況和gc時間等資訊

-gc 更詳細的記憶體資訊,是gcutil的更新版本

-class 加載class的情況

-gccause 可以列印出gc原因

jstat -gcutil vmid 1s

output:

S0 S1 E O P YGC YGCT FGC FGCT GCT

0.00 22.02 3.27 5.50 49.12 63 186.797 0 0.000 186.797

每秒輸出一次

S0 是0号Survivor Space

S1 是1号Survivor Space

E 是Eden

O 是Old Generation

P 是Permanent Generation

YGC 是young gc的次數

YGCT 是young gc花費的總時間

FGC 是full gc的次數

FGCT 是full gc花費的總時間

GCT 是所有gc的時間

jstat -gc vmid 1s

output

S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT

9088.0 9088.0 0.0 2001.0 72832.0 24685.2 728192.0 40082.0 131072.0 64380.4 63 186.797 0 0.000 186.797

C代表Capacity,是可使用的空間

U代表Used, 是已用空間

3、jmap

jmap工具可以查到堆記憶體的具體使用情況,可以看到堆記憶體中每個類占的空間大小。

參數: jmap -option vmid

-option 是啟動參數,指定jmap要做的事情

-heap 可以看到堆記憶體的使用情況

-dump 常用的參數,可以導出一個記憶體映像檔案,解析之後可以看到記憶體的使用情況。jmap -dump:format=b,file=file.hprof vmid

jmap的導出檔案可以用eclipse mat工具來解析。

關于性能調優的一些思考:一般來說,java程式出現性能問題,是由機器本身的兩個瓶頸造成,一者是記憶體問題,另一則是CPU問題。java的性能問題基本可以由這兩個方面來解決。當出現性能問題,首先觀察問題出現的症狀,如果是方法執行時間過長或出現死鎖問題,則歸類于CPU問題,這類問題一般是由于代碼品質不高,或者是線程安全問題或者是算法效率太低引起的,那麼應該定位到問題所在,修改代碼;如果是程式出現偶發性的卡頓之類的問題,則診斷為記憶體問題,經常出現的情況就是頻繁GC導緻的卡頓等問題,這時候就可以用到我們的JDK工具來定位問題所在,進而解決問題。