1.11. Javaプロセスの監視・管理

ドメイン内で起動するJavaプロセス(JVM)を監視・管理する方法について説明します。
方法は幾つかあり、それぞれ対象となるJavaプロセスやその表示形式が異なりますので、目的に応じて使い分けて下さい。

1.11.1. 運用管理ツールによる監視・管理

WebOTXが提供する各種運用管理ツールを使用してJavaプロセスの監視・管理を行います。
この方法では、次のJavaプロセスが監視・管理の対象となります。

統合運用管理ツール

ドメインに接続後、「<ドメイン名>」-「統計情報」-「domain」-「アプリケーションサーバ」-「JVM」を選択すると、画面右側に監視情報が表示されます。


運用管理コマンド

ドメインにログイン後、JVMの統計情報に対するコマンド表記名(server.jvm)を使用して、次のコマンドを実行します。

otxadmin> get --monitor=true server.jvm.*

デフォルトの状態では、ヒープの消費状況や実行時間についての情報を参照することができます。

より詳細な情報を参照するためには、JVMに対するモニタリングレベルを変更します。モニタリングレベルに応じて、次のような情報を参照することができます。

監視対象・モニタリングレベル対応表
監視対象 説明 モニタリングレベル 統合運用管理ツール
「<ドメイン名>」-「統計情報」-「domain」-「アプリケーションサーバ」-「JVM」を基準
運用管理コマンド
コマンド表記名(CLIName)
"get --monitor=true <CLIName>.*"を実行
クラスローディングシステム JVM内で使用されるクラスのロードに関する情報を監視します。 LOW,HIGH 「JVM」配下 server.jvm.class-loading-system
コンパイルシステム JVM内で実行されるコンパイル処理に関する情報を監視します。 LOW,HIGH 「JVM」配下 server.jvm.compilation-system
ガベージコレクタ JVM内で実行されるGC処理に関する情報を監視します。 LOW,HIGH 「JVM」-「メモリシステム」-「<ガベージコレクタ名>」配下 server.jvm.garbage-collectors.<ガベージコレクタ名>
メモリシステム JVM内でのメモリの消費状況や、メモリプールに関する情報を監視します。 概要:LOW,HIGH
プール単位:HIGH
概要:「JVM」配下
プール単位:「JVM」-「メモリシステム」-「<メモリプール名>」
概要:server.jvm.memory
スレッド単位:server.jvm.memory.<メモリプール名>
オペレーティングシステム JVMが動作するOSに関する情報を監視します。 LOW,HIGH 「JVM」配下 server.jvm.operating-system
実行時システム JVMの実行に関する情報を監視します。 LOW,HIGH 「JVM」配下 server.jvm.runtime
スレッドシステム JVM内で生成されるスレッドに関する情報を監視します。 概要:LOW,HIGH
スレッド単位:HIGH
概要:「JVM」配下
スレッド単位:「JVM」-「スレッドシステム」-「<スレッド名>」
概要:server.jvm.thread-system
スレッド単位:server.jvm.thread-system.<スレッド名>

なお、各監視対象で参照可能な監視項目の詳細については、 [ モニタリング ] を参照してください。

統合運用管理ツール

「<ドメイン名>」-「アプリケーションサーバ」-「モニタリングサービス」-「モジュールモニタリングレベル」を選択し、画面右側に表示される設定項目「JVM」の値を LOW もしくは HIGH に変更し、「更新」ボタンを押します。


運用管理コマンド

次のコマンドを実行します。

※監視を終了する場合は、モニタリングレベルを OFF に戻して設定を更新してください。

また、統合運用管理ツールでは、定期的な情報採取によりこれまでに取り上げた監視項目をグラフ化表示したり、監視項目が一定条件を満たした際にその旨を通知画面に出力したりすることができます。一方で、運用管理コマンドではJVMヒープ情報に関して、定期的な情報採取により監視項目をプロンプト画面に出力することができます。詳しくは、 [ <統合運用管理ツール(WebOTX Administrator) > 統計情報 ] を参照してください。

1.11.2. jconsoleによる監視・管理

JDKに付属のJMX(Java Management Extensions)仕様に準拠した監視ツールjconsoleを利用して、Javaプロセスの監視・管理を行います。
この方法では、次のJavaプロセスが監視・管理の対象となります。

また、jconsoleに関する詳しい説明はOracleの公式サイトを参考にして下さい。
http://docs.oracle.com/javase/7/docs/technotes/guides/management/jconsole.html

但し、jconsoleをWebOTXと同じマシン(ローカル)で動作させるか、異なるマシン(リモート)で動作させるかによってパラメータ指定画面が異なります。以下に接続例を示します。

jconsoleをWebOTXと同じマシン(ローカル)で動作させている場合

※プロセスグループの各プロセスに接続する場合は、後述のリモート接続による作業を行って下さい。


図 jconsole画面

「ローカルプロセス」をクリックし、接続候補リストの中から「名前」列に“com.nec.webotx.enterprise.bootstrap.ASMain -domainname domain1”(JMXエージェントへの接続) が表示されている行を選択し、「接続」ボタンを押します。

※上記以外のJavaプロセスを監視する場合には、 [ リファレンス: プロセス ] で記載されている引数情報を参考に対象のプロセスを選択してください。

jconsoleをWebOTXと異なるマシン(リモート)で動作させている場合


図 jconsole画面

「リモートプロセス」をクリックし、入力フィールドに<ホスト名>:<ポート>の形式で入力します。「ユーザ名」と「パスワード」には、ドメインに対して設定されている運用ユーザ名とパスワードを入力します。

パラメータ指定後、「接続」ボタンを押します。

接続に成功すると、以下のような画面が表示されます。


図 jconsole画面

初期表示画面では「概要」タブが選択されており、監視対象のJVMに関するパフォーマンス情報とリソース消費情報、およびOSに関するリソース情報が表示されます。

この他の画面では、カテゴリ毎に情報が細分化され、それらの監視項目がグラフィカルに表示されます。以下に、各表示項目について簡潔に説明します。


(※)WebOTXでは、高機能化の実現にあたり、独自にJMX仕様を拡張させたMBeanを使用しています。そのため、そのMBeanを示すツリーノードは画面左側に表示されますが、ノードをクリックした場合、jconsoleでは対応しきれず以下のエラーメッセージが表示されます。

JMXError

これらのMBeanは通常システム内部でのみ使用するため、ユーザが参照する必要はありません。これらのMBeanは、システム内部および「統合運用管理ツール」や「運用管理コマンド」などから参照されます。

1.11.3. 統計レポート出力

運用管理コマンドを使用して、Javaプロセスに対する様々な監視項目をレポート形式で出力します。
この方法では、次のJavaプロセスが監視・管理の対象となります。

対象のドメインにログイン後、以下の指定方法によりコマンドを入力することで、ドメイン内のJavaプロセスに対する監視項目を画面に表示することができます。

otxadmin> generate-jvm-report --type <監視項目のタイプ名> <サーバ名>

<監視項目のタイプ名>には、summary、memory、class、thread のいずれかを指定します。<サーバ名>には、情報取得の対象とするサーバ(Javaプロセス)の名前を指定します。サーバ名は次のようになります。

監視項目の取得対象がJava用TPPプロセスである場合、次の指定方法によっても同じ結果を得ることができます。

otxadmin> generate-jvm-report --apgroup <アプリケーショングループ名> --pgroup <プロセスグループ名> --type <監視項目のタイプ名> <プロセスID>

<プロセスID>には、Java用TPPプロセスに割り当てられているプロセスIDを指定します。プロセスIDの確認方法については [ [参考1]Java用TPPプロセスに対するプロセスIDの確認方法 ] をご覧ください

さらに、Java用TPPプロセスに対するコマンド指定方法の詳細に関しては [ [参考2]Java用TPPプロセスに対する監視項目を取得する場合のコマンド指定方法 ] をご覧ください。

なお、--type オプションが省略された場合は、<監視項目のタイプ名>に "summary" がデフォルトとして指定されます。また、<サーバ名>が省略された場合は、"server" がデフォルトとして指定されます。

プロンプトの設定状況によっては記述の途中で改行されて読み辛くなる場合や、最初の方の出力結果が表示されなくなる場合があります。一方で、出力結果をファイルに保存したい場合があります。その際は、コマンドの実行結果を任意のファイルにリダイレクトする等の方法が有効です。

otxadmin generate-jvm-report --user <ユーザ名> --password <パスワード> --host <ホスト名> --port <ポート番号> --type thread server > <出力先ファイルパス>

なお、いずれの取得情報においても、Java用TPPプロセスを対象とした場合、アプリケーショングループ、プロセスグループ、プロセスIDの情報が追加でタイトル行に表示されます。複数のプロセスを情報取得の対象とした場合、この表示を参考にプロセス単位で読み分けてください。

例) アプリケーショングループ名 : apg、プロセスグループ名 : pg、プロセスID : 12345、取得対象 : summary の場合

**** Java Virtual Machine [Application Server Instance Name: apg-pg] Summary ****
(Application Group : apg, Process Group : pg, Process ID : 12345)
    :
[参考1]Java用TPPプロセスに対するプロセスIDの確認方法

Java用TPPプロセスのプロセスIDについては、以下のコマンドを実行することで確認できます。

otxadmin> list --monitor tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.processes.*

例) アプリケーショングループ名 : apg、プロセスグループ名 : pg の場合

otxadmin> list --monitor tpsystem.applicationGroups.apg.processGroups.pg.processes.*
tpsystem.applicationGroups.apg.processGroups.pg.processes.14348.jvm
tpsystem.applicationGroups.apg.processGroups.pg.processes.21380.jvm
    :

この時、表示される識別名の後部に示されている数値(14348、21380、...)が、実行中のJava用TPPプロセスのIDです。

[参考2]Java用TPPプロセスに対する監視項目を取得する場合のコマンド指定方法

Java用TPPプロセスの監視項目を取得する場合のコマンド指定方法について、幾つかの例を示します。

例) アプリケーショングループ名 : apg、プロセスグループ名 : pg、プロセスID : 12345、取得対象 : summary の場合

コマンドの詳細については、[ generate-jvm-report ]をご覧ください。

1.11.4. GCログ出力

JavaプロセスにおけるGC処理の様子をファイルへ出力します。
この方法では、次のJavaプロセスが監視・管理の対象となります。

統合運用管理ツール

ドメインに接続後、「<ドメイン名>」-「アプリケーションサーバ」-「JVM構成」を選択し、画面右側に表示される「GC」タブ内の設定項目-「GC情報の出力」にチェックを入れます。この状態では、標準出力用のログファイルであるserver.log(${INSTANCE_ROOT}/logs配下)に出力されますので、任意のファイルにGCログ情報を出力するためには、さらに同タブ内の項目「GC情報の出力先」にて、ファイル出力先のフルパスを指定して下さい(ファイル名のみ指定した場合は、${INSTANCE_ROOT}/config配下に出力されます)。
設定後、「更新」ボタンを押します。設定は、ドメインの再起動後に反映されます。

admingui

運用管理コマンド

ドメインにログイン後、次のコマンドを実行します。

otxadmin> set server.java-config.verbose-gc-enabled=true

任意のファイルにGCログ情報を出力するためには、さらに次のコマンドを実行します。
ここでは、出力先のファイルパスを D:\WebOTX\domains\domain1\logs\gc.log とします。

otxadmin> set server.java-config.gc-logfile="D:\WebOTX\domains\domain1\logs\gc.log"

※GCログの採取を終了する場合は、設定を元の状態に戻します(運用管理コマンドの場合はtrueで設定した値をfalseに更新します)。

なお、ドメイン再起動の度に過去のGCログファイルは上書きされますので、ログを残す場合にはドメイン起動の前にファイルを別の場所に退避するか、リネームするなどの処置を行ってください。

出力結果例
3.886: [GC 16446K->3056K(62848K), 0.0165272 secs]
9.617: [GC 19504K->4723K(62848K), 0.0174459 secs]
16.169: [GC 21171K->7358K(62848K), 0.0296354 secs]
17.911: [GC 11882K->7984K(62848K), 0.0125603 secs]
17.924: [Full GC 7984K->7787K(62848K), 0.1311320 secs]
        :

上記出力例の場合、1行目のログは、JVMが起動してから3.886秒後に、GCによってJavaヒープ領域内のオブジェクトの合計サイズが16,446K(≒16M)バイトから3,056K(≒3M)バイトに減少したことを示します。すなわち、このGCにより13,390K(≒13M)バイトの領域が解放されたことになります。また、カッコ内の数値は、現在のJavaヒープ全体のサイズが62,848K(≒62M)バイトであることを示します。最後の数値は、このGCに要した時間で、0.0165272(≒17ミリ)秒となります。
なお、ログ中の "GC" は、Scavenge GC、"Full GC" は、フルGC が発生したことを示します。

GC

より詳細なGC情報を参照するためには、JVMオプションを追加します。オプションに応じて、次のような情報を参照することができます。

JVMオプション・参照可能情報の対応表
オプション 説明
-XX:+PrintGCDetails GCに関する詳細情報を表示します。
-XX:+PrintGCTimeStamps GCの詳細情報にタイムスタンプを追加します。
-XX:+PrintHeapAtGC GC前後のヒープの使用状況を表示します。
-XX:+PrintTenuringDistribution オブジェクトの生存回数や殿堂入りに関する情報を表示します。
統合運用管理ツール

「<ドメイン名>」-「アプリケーションサーバ」-「JVM構成」を選択し、画面右側に表示される「JVMオプション」タブ内の設定項目-「JVMオプション」に上述のオプションを追加し、「更新」ボタンを押します。

運用管理コマンド

次のコマンドを実行します(上述のオプションを全て指定する場合)。

otxadmin> create-jvm-options -- "-XX\:+PrintGCTimeStamps"
otxadmin> create-jvm-options -- "-XX\:+PrintGCDetails"
otxadmin> create-jvm-options -- "-XX\:+PrintHeapAtGC"
otxadmin> create-jvm-options -- "-XX\:+PrintTenuringDistribution"

GCログの採取を終了する場合は、オプションを削除します(運用管理コマンドの場合は delete-jvm-options コマンドにて各オプションを指定し削除)。

上述のオプションを全て指定した場合の出力結果例
3.970: [GC {Heap before gc invocations=0:
 def new generation   total 19648K, used 17472K [0x10010000, 0x11560000, 0x1aab0000)
  eden space 17472K, 100% used [0x10010000, 0x11120000, 0x11120000)
  from space 2176K,   0% used [0x11120000, 0x11120000, 0x11340000)
  to   space 2176K,   0% used [0x11340000, 0x11340000, 0x11560000)
 tenured generation   total 43712K, used 0K [0x1aab0000, 0x1d560000, 0x30010000)
   the space 43712K,   0% used [0x1aab0000, 0x1aab0000, 0x1aab0200, 0x1d560000)
 compacting perm gen  total 65536K, used 7519K [0x30010000, 0x34010000, 0x38010000)
   the space 65536K,  11% used [0x30010000, 0x30767e60, 0x30768000, 0x34010000)
No shared spaces configured.
3.971: [DefNew
Desired survivor size 1114112 bytes, new threshold 1 (max 15)
- age   1:    2228224 bytes,    2228224 total
: 17472K->2176K(19648K), 0.0265893 secs] 17472K->3213K(63360K)Heap after gc invocations=1:
 def new generation   total 19648K, used 2176K [0x10010000, 0x11560000, 0x1aab0000)
  eden space 17472K,   0% used [0x10010000, 0x10010000, 0x11120000)
  from space 2176K, 100% used [0x11340000, 0x11560000, 0x11560000)
  to   space 2176K,   0% used [0x11120000, 0x11120000, 0x11340000)
 tenured generation   total 43712K, used 1037K [0x1aab0000, 0x1d560000, 0x30010000)
   the space 43712K,   2% used [0x1aab0000, 0x1abb3790, 0x1abb3800, 0x1d560000)
 compacting perm gen  total 65536K, used 7519K [0x30010000, 0x34010000, 0x38010000)
   the space 65536K,  11% used [0x30010000, 0x30767e60, 0x30768000, 0x34010000)
No shared spaces configured.
}
, 0.0268294 secs]
        :

この場合のログは、ヒープ内のメモリ領域ごとに非常に詳細なGC情報が出力されますが、JVMのベンダによってその出力形式が異なるため、解析の際には各ベンダが提供する専用のツールなどをご利用ください。