Help us understand the problem. What is going on with this article?

簡単にJavaアプリケーションの情報を見る方法

More than 3 years have passed since last update.

Javaで作ったプログラムはJVM(Java Virtual Machine)で動作します。
Javaはメモリ管理などの細かい部分をプログラマではなく、JVMが請け負っています。
そのため、プログラマはいろいろな制約をあまり気にすることなくプログラミングが可能、という利点があるのですが、大規模なプログラムでは動作状態が気になるもの。
それを監視するための仕様としてJMX(Java Management Extensions)というものがあります。
JVMに組み込まれているJMXに、APIを通じてアクセスすることでJVMの情報を閲覧することができます。
親切な事に、JDKには監視情報をグラフィカルに表示するためのツールであるjconsoleが同梱されています。
今回は、jconsoleを使ってJavaアプリケーションの情報の監視をするまでを書いていきます。

jconsoleでの監視

監視対象のプログラムを作成

まずは、監視対象となるプログラムを作成します。
jconsoleでは、動作中のプログラムに対して監視を行うため、すぐに終了しないプログラムが必要です。
今回は単純に1秒ごとに文字列を出力するプログラムを作ります。

Main.java
package jp.frost;

public class Main {
    public static void main(String args[]) {
        while(true) {
            System.out.println("Hello! JMX");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

プログラムを作成したら実行しておきます。

jconsoleの起動

まずは、jconsoleを起動します。
jconsoleはJDKのインストール場所\binフォルダの中にexeファイルがあるので、起動します。
もし、JDKにパスが通っている場合、コマンドプロンプトからjconosoleコマンドで起動することもできます。

起動すると接続の画面が開きます。
image

監視の開始

ローカルプロセスの中には、現在起動中のプログラムの一覧が表示されるので、先ほど起動しておいたプログラムを選択して、接続ボタンを押します。

保護されていない接続の確認がされますが、ローカルに接続する分には問題ないのでそのまま接続。
image

接続後は概要タブが開き、時系列ごとの各情報を確認することができます。
image

監視内容

メモリー(ヒープ・メモリー使用率)

image

メモリータブではJVMのメモリ使用状況を確認することができます。
主に監視する必要があるのは、ヒープ・メモリー(オブジェクトを配置するメモリ領域。クラス情報などは含まない)の使用率です。
Survivor、Eden、Oldの3種類の各領域ごとの使用率を確認することもできます。

また、右上の「GCの実行」ボタンを押すことでGC(ガーベッジコレクション)を強制的に実行させることが可能。
上の画像でいきなりメモリ使用率が下がっているのはGCを実行したためです。

スレッド

image

スレッドがいくつ動いているか、各スレッド事の状況、デッドロックの検出などが可能。
今回のプログラムの場合、特にほかのスレッドを作成していないのでシングルスレッドですが、システムスレッドがほかにも動いているので、10個以上のスレッドが表示されています。

クラス

image

クラスでは、現在そのプログラムがロードしているクラスの数を表示します。

VMサマリー

image

VMサマリーでは、JVMの概要を見ることができます。

MBeans

image

MBeansタブでは、MBeansという機能を使い、プログラム内のオブジェクトの中身を参照、変更することが可能です。
MBeansServerにオブジェクトを登録することで、この画面から自作のオブジェクトを変更することが可能となります。
今回は特にMBeansに関しては設定していないので、システムオブジェクトのみが表示されています。

以上のように、jconsoleを使うことで簡単にプログラムの状態を監視することができます。

frost_star
まだまだ半人前プログラマー。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした