GC調優命令也就這麼幾個?趕快來學習啊

GC調優命令:

1.jps

2.jmap

3.Jstack

4.Jinfo

5.Jstat

1.jps

檢視jvm應用和埠

GC調優命令也就這麼幾個?趕快來學習啊

2.jmap

此命令可以用來檢視記憶體資訊

# 檢視對類的資訊jmap -histo pid > 。/log。txt

GC調優命令也就這麼幾個?趕快來學習啊

說明:

num:序號

instances:例項數量

bytes:佔用空間大小

class name:類名稱,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]

# 檢視新生代老年代等記憶體資訊jmap -heap pid

GC調優命令也就這麼幾個?趕快來學習啊

# 生產dump檔案 可供一些工具來分析jvm 例如JProfilerjmap -dump:format=b,file=test。hprof pid

3.Jstack

檢視jvm資訊,可以檢視死鎖

GC調優命令也就這麼幾個?趕快來學習啊

4.Jinfo

#檢視正在執行的Java應用程式的擴充套件引數#檢視jvm的引數Jinfo pid

GC調優命令也就這麼幾個?趕快來學習啊

5.Jstat

jstat命令可以檢視堆記憶體各部分的使用量,以及載入類的數量。

jstat -gc pid

GC調優命令也就這麼幾個?趕快來學習啊

說明:

S0C:第一個倖存區的大小

S1C:第二個倖存區的大小

S0U:第一個倖存區的使用大小

S1U:第二個倖存區的使用大小

EC:伊甸園區的大小

EU:伊甸園區的使用大小

OC:老年代大小

OU:老年代使用大小

MC:方法區大小(元空間)

MU:方法區使用大小

CCSC:壓縮類空間大小

CCSU:壓縮類空間使用大小

YGC:年輕代垃圾回收次數

YGCT:年輕代垃圾回收消耗時間,單位s

FGC:老年代垃圾回收次數

FGCT:老年代垃圾回收消耗時間,單位s

GCT:垃圾回收消耗總時間,單位s

JVM執行情況預估

用 jstat gc -pid 命令可以計算出如下一些關鍵資料,有了這些資料就可以採用之前介紹過的最佳化思路,先給自己的系統設定一些初始性的JVM引數,比如堆記憶體大小,年輕代大小,Eden和Survivor的比例,老年代的大小,大物件的閾值,大齡物件進入老年代的閾值等。

年輕代物件增長的速率

可以執行命令 jstat -gc pid 1000 10 (每隔1秒執行1次命令,共執行10次),透過觀察EU(eden區的使用)來估算每秒eden大概新增多少物件,如果系統負載不高,可以把頻率1秒換成1分鐘,甚至10分鐘來觀察整體情況。注意,一般系統可能有高峰期和日常期,所以需要在不同的時間分別估算不同情況下物件增長速率。

Young GC的觸發頻率和每次耗時

知道年輕代物件增長速率我們就能夠根據eden區的大小推算出Young GC大概多久觸發一次,Young GC的平均耗時可以透過 YGCT/YGC公式算出,根據結果我們大概就能知道系統大概多久會因為Young GC的執行而卡頓多久。

每次Young GC後有多少物件存活和進入老年代

這個因為之前已經大概知道Young GC的頻率,假設是每5分鐘一次,那麼可以執行命令 jstat -gc pid 300000 10 ,觀察每次結果eden,survivor和老年代使用的變化情況,在每次gc後eden區使用一般會大幅減少,survivor和老年代都有可能增長,這些增長的物件就是每次Young GC後存活的物件,同時還可以看出每次Young GC後進去老年代大概多少物件,從而可以推算出老年代物件增長速率。

Full GC的觸發頻率和每次耗時

知道了老年代物件的增長速率就可以推算出Full GC的觸發頻率了,Full GC的每次耗時可以用公式 FGCT/FGC 計算得出。

最佳化思路

其實簡單來說就是儘量讓每次Young GC後的存活物件小於Survivor區域的50%,都留存在年輕代裡。儘量別讓物件進入老年代。儘量減少Full GC的頻率,避免頻繁Full GC對JVM效能的影響。