Javaでサーバーを組み立てて、長期運用しているとOut of Memoryエラー等がでて、サーバーが飛んだりします。
こんな時はGCの挙動を確認してメモリーの利用量を監視してみましょう。
んで、やり方。
その1:GCのタイミングのときのみ記録する。
Javaを起動するときに特定のフラグをつけると、GCが発生したときにデータを記録してくれます。
-Xloggc:[ファイル名]
をいれるのが一般的かな。
-verbose:gc
というのもあります。
その2:メモリーの状態を記録する。
動作しているJavaのプロセスIDがわかるなら
jstatのコマンドを利用して記録することもできる。
$ jstat -gc [プロセスID] [記録間隔]
オプションは-gc以外にもいろいろあります。
こちらで調査した場合はgcviewerではグラフ化できないので、エクセルなりつかって、グラフ化するといいと思います。
その3:jconsoleやjava visualvmでメモリー利用量のグラフを眺める。jmx経由でjavaの状態を確認できるこれらのツールでプロセスにつなぐと状態をリアルタイムで確認することができます。
ただしGUIツールでデータの保存ができないのが難点(visualVMにはスナップショットの記録というのがあるけど)
ピークになる時間帯をあらかじめ目星つけておいてjstatで記録をとる。
リアルタイムにいろんな情報がとりたいときにはjconsoleやvisualVMで確認する。
この2つで基本せめることができますね。
0 件のコメント:
コメントを投稿