インフラエンジニアbacchiのわかったことまとめ

bacchi.me

TomcatのGCの発生頻度の調査手順のまとめ

TomcatのPIDを調べ、jstat コマンドを実行すればOK

TomcatのPIDの調査

まずはプロセスIDを調べます。

$ su - tomcat
$ jsp -v

または

$ sudo -u tomcat jps -v

tomcatユーザの起動したJavaプロセスのIDを付加情報付きで表示します。

javaプロセスがひとつしかない場合などは、下記のコマンドを実行します。

$ pgrep -lf java

jstat コマンドでGCの統計情報を見る

jstat コマンドの -gcutil オプションで見ることができます。

PIDが54321だった場合、5秒ごとにgcの発生状況をチェックするコマンドの例。

$ jstat -gcutil -t 54321 5000

実行するコマンドの意味は以下の通り。

jstat   
-gcutil GCの統計情報
-t タイムスタンプを出力

詳しくはjstatのマニュアルを見てください。

gcutilの見出しについて

gcutil の見出しの見方は下記の通り。

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

gcutilの見出しの詳細

説明
S0 Survivor 領域 0 の使用率 (現在の容量に対するパーセンテージ)
S1 Survivor 領域 1 の使用率 (現在の容量に対するパーセンテージ)
E Eden 領域の使用率 (現在の容量に対するパーセンテージ)
O Old 領域の使用率 (現在の容量に対するパーセンテージ)
P Permanent 領域の使用率 (現在の容量に対するパーセンテージ)
*C javaが確保したメモリサイズ
*U 使用済みメモリ
YGC 若い世代の GC イベント数
YGCT 若い世代のガベージコレクション時間
FGC フル GC イベント数
FGCT フルガベージコレクション時間
GCT ガベージコレクション総時間

Java8の場合

2015/01/09 追記
Java8はpermgenがなくなってmetaspaceになったので、P -> M に変わってました・・

# jstat -gcutil xxxx
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00   1.21  31.14  92.92  82.55    137    4.152   729  288.021  242.212

調査の上まとめます。

メモリ使用量の確認

メモリ使用量を確認したいときはgcオプションを使えばOK。

# jstat -gc -t 12345 5000
  • B!