GCの発生頻度などの調査
GCの発生頻度を調査するためのカンペ。gclogを使用せずにお手軽に実施できる。
まずはプロセスIDを調べる。例としてtomcatの場合。
$ sudo -u tomcat jps -v
tomcatユーザの起動したJavaプロセスのIDを付加情報付きで表示する。
javaプロセスがひとつしかない場合などは、下記のほうが楽かもしれない。
$ pgrep -lf java
PIDが123456だった場合、3秒ごとにgcの発生状況をチェックするコマンドの例。
jstat -gcutil -t 123456 3000
意味は以下のとおり。
jstat <出力オプション> <プロセスID> <データ取得間隔(ms)> -t タイムスタンプを出力 -gcutil GCの統計情報
jstatのマニュアルは以下。
gcutilの見出し
Timestamp S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT
gcutilの見出しは以下のルールになる
S* | Suviver | |
E* | Eden | |
Y | Young | |
O* | Old | |
P* | Permenet | Permanent領域は、JVMにロードされたクラスの置き場所 |
F* | Full | |
*C | comitted | javaが確保したメモリサイズ |
*U | used | 使用済みメモリ |
*GC | GCの回数 | |
*GCT | GCの時間 |
GCについては、下記が詳しい。
- http://www.atmarkit.co.jp/ait/articles/0404/02/news079.html
- http://www.atmarkit.co.jp/ait/articles/0211/30/news002.html
メモリ使用量を確認したいとき
gcオプションを使えばよい。
$ sudo jstat -gc -t 12345 3000