2012年5月31日木曜日

Javaのメモリ領域を監視できるコマンド【jstat, jps】

jps
jstat
という2つのコマンドを使用する現在のJavaのヒープメモリの領域の使用状況がわかります

[root@yoshi3 init.d]# service tomcat5 start
Starting tomcat5:                                          [  OK  ]
[root@yoshi3 init.d]# netstat -an | grep 8080
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN
[root@yoshi3 init.d]# jps
10337 Bootstrap
10384 Jps
[root@yoshi3 init.d]# jstat -gcutil 10337 1000
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00  58.12   3.22  44.79  51.70     11    0.022     0    0.000    0.022
  0.00  58.12   3.22  44.79  51.70     11    0.022     0    0.000    0.022
  0.00  58.12   3.22  44.79  51.70     11    0.022     0    0.000    0.022
  0.00  58.12   3.22  44.79  51.70     11    0.022     0    0.000    0.022
  0.00  58.12   3.22  44.79  51.70     11    0.022     0    0.000    0.022
  0.00  58.12   3.22  44.79  51.70     11    0.022     0    0.000    0.022
  0.00  58.12   3.22  44.79  51.70     11    0.022     0    0.000    0.022

まずはjpsコマンドで現在JVM上で稼働しているプロセス情報を取得します
jpsで返却される番号は VMIDと呼ばれるものになります

それをjstatコマンドに食わせることでそのVMIDのプロセスのメモリ状況を閲覧することができます
上記のjstatのコマンドはメモリ使用量の概要を表しています
「O」がヒープメモリのOld領域で
「E」がエデン領域となります
「E」は結構頻繁に値が小さくなったり大きくなったりしますが、「O」が一気に小さくなるのでフルGCが起きている証拠なので頻繁におきているとまずいです
まずいというのは言い換えると「アプリの実装がよくないということになります」
また、一番後ろの1000は一秒おきにストリーム表示してくれるパラメータです

他にもjstatのパラメータはいろいろあるようです
jstatの詳しいパラメータや表示される項目についてはsunの公式サイトがわかりやすいです
http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/share/jstat.html

0 件のコメント:

コメントを投稿