0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Java実行時にJVMの情報を出力する(jstat、CentOS)

Last updated at Posted at 2017-10-23

稼働中のコンピューティングリソースを蓄積・監視することは、機器の状態を確認して障害を事前に防ぐという意味でも、将来の機器拡張計画を立てるという意味でも、安定稼働に凄く効果があると思います。近年OSSのソフトウェアがあったり、簡単に導入できて安価なクラウド蓄積サービスがたくさんできて、導入しやすくなっています。

今回、CPUやメモリといったコンピューティングリソースの中でも、JVMのメモリ使用率の取得と蓄積に焦点を当てたいと思います。JVMはOSから見た場合、起動時に設定したメモリ量を確保しています。JVMはその中で割り当て、解放を繰り返し、確保量に対して空き容量が不足したら、(JVMのパラメータにもよりますが)追加でメモリを確保します。JVMのメモリ利用量の推移を可視化してみます。

JVMのメモリ利用推移を蓄積するソフトウェアはたくさんありますが、今回はjdkに付属しているjstatで出力したいと思います。

jdkを導入
最新版を取得していれます

$ curl --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" -OL http://download.oracle.com/otn-pub/java/jdk/9.0.1+11/jdk-9.0.1_linux-x64_bin.rpm
$ sudo rpm -ivh jdk-9.0.1_linux-x64_bin.rpm
$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

Javaのサンプル
数十秒の期間JVMを動かすようなプログラム

import java.util.Calendar;
public class Test {
  public static void main(String[] args) {
    System.out.println("start:" + Calendar.getInstance().getTime());
    String ss = "test!";
    try{
      for (int i = 0; i < 1000000; i++) {
        if ( i % 100000 == 0 ) Thread.sleep(2000);
        ss = "test!!";
      } 
    } catch(Exception e) {
      System.out.println("catch");
    }
    System.out.println("end  :" + Calendar.getInstance().getTime());
  }
}

Javaの実行と、jstatの出力
もう少しヒープの動きが見えるプログラムにした方が良かったかも。

$ java Test
start:Tue Oct 24 03:09:43 JST 2017
end  :Tue Oct 24 03:10:03 JST 2017

$ jstat -gc `pgrep -f java` 2000
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000
512.0  512.0   0.0    0.0    4416.0   2954.9   10944.0      0.0     4480.0 1143.5 384.0   82.4       0    0.000   0      0.000    0.000

visualVM/java flight recorderなど綺麗に出力できるツールが利用できれば言うことないですが、JMXによるリモート接続が利用できない環境など、手間はかかるものの情報を蓄積する手段として利用できそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?