Javaヒープ領域の使用量と容量をコマンドラインから取得する #java

JDKに標準で入っているjstatコマンドを使います。jstatコマンドではJavaヒープ領域中のNew領域・Old領域・Permanent領域の使用量・容量・最小容量・最大容量などを取得することができます。

※ 2015/06/24追記: こちらはJava7までのヒープ領域についての記事です。Java8はPermanent領域がないなどの違いがあるため、別途Java8のjstat公式ページを参照してください。

Javaヒープについて

Javaヒープ領域を指定するJVMオプションは-Xms,-Xmxです。このオプションで指定しているJavaヒープ領域のサイズはNew領域とOld領域を合算したものとなり、Permanent領域は含まれていません。また、New領域はSurvivor領域0(From)+Survivor領域1(To)+Eden領域の合算です。

取得方法

-gcオプションでJavaヒープ領域の全ての容量を取得できます。

$ /usr/java/default/bin/jstat -gc `pidof java`
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
3264.0 3264.0  0.0   3264.0 26240.0  20019.6   98304.0    10708.0   21248.0 15226.6      3    0.068   0      0.000

Javaヒープ領域の使用量と容量は以下となります。 *1

  • Javaヒープ領域の使用量 = S0U + S1U + EC + OU (33.991MB)
  • Javaヒープ領域の容量 = NGC + OGC (128MB)

また、JVMオプションで指定した値と各領域の最小容量・最大容量は、-gcオプションのそれぞれの値と合致します。

  • -XX:MaxNewSize= NGCMX (32MB)
  • -Xms = NGCMN * OGCMN (128MB)
  • -Xmx = NGCMX * OGCMX (256MB)
  • -XX:MaxPermSize = PGCMX (64MB)


-gcオプション

公式から引用します。

ガベージコレクトされたヒープの統計データ
説明
S0C Survivor 領域 0 の現在の容量 (KB)
S1C Survivor 領域 1 の現在の容量 (KB)
S0U Survivor 領域 0 の使用率 (KB)
S1U Survivor 領域 1 の使用率 (KB)
EC Eden 領域の現在の容量 (KB)
EU Eden 領域の使用率 (KB)
OC Old 領域の現在の容量 (KB)
OU Old 領域の使用率 (KB)
PC Permanent 領域の現在の容量 (KB)
PU Permanent 領域の使用率 (KB)
YGC 若い世代の GC イベント数
YGCT 若い世代のガベージコレクション時間
FGC フル GC イベント数
FGCT フルガベージコレクション時間
GCT ガベージコレクション総時間

*1:公式では使用量ではなく使用率と表記されています。