WebOTX Manual V10.2 (第4版) 目次を表示 |
ドメイン内で起動するJavaプロセス(JVM)を監視・管理する方法について説明します。
方法は幾つかあり、それぞれ対象となるJavaプロセスやその表示形式が異なりますので、目的に応じて使い分けて下さい。
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 に変更し、「更新」ボタンを押します。
次のコマンドを実行します。
otxadmin> set server.monitoring-service.module-monitoring-levels.jvm=LOW
otxadmin> set server.monitoring-service.module-monitoring-levels.jvm=HIGH
※監視を終了する場合は、モニタリングレベルを OFF に戻して設定を更新してください。
また、統合運用管理ツールでは、定期的な情報採取によりこれまでに取り上げた監視項目をグラフ化表示したり、監視項目が一定条件を満たした際にその旨を通知画面に出力したりすることができます。一方で、運用管理コマンドではJVMヒープ情報に関して、定期的な情報採取により監視項目をプロンプト画面に出力することができます。詳しくは、 [ <統合運用管理ツール(WebOTX Administrator) > 統計情報 ] を参照してください。
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画面
「ローカルプロセス」をクリックし、接続候補リストの中から「名前」列に“com.nec.webotx.enterprise.bootstrap.ASMain -domainname domain1”(JMXエージェントへの接続) が表示されている行を選択し、「接続」ボタンを押します。
※上記以外のJavaプロセスを監視する場合には、 [ リファレンス: プロセス ] で記載されている引数情報を参考に対象のプロセスを選択してください。
図 jconsole画面
「リモートプロセス」をクリックし、入力フィールドに<ホスト名>:<ポート>の形式で入力します。「ユーザ名」と「パスワード」には、ドメインに対して設定されている運用ユーザ名とパスワードを入力します。
パラメータ指定後、「接続」ボタンを押します。
接続に成功すると、以下のような画面が表示されます。
図 jconsole画面
初期表示画面では「概要」タブが選択されており、監視対象のJVMに関するパフォーマンス情報とリソース消費情報、およびOSに関するリソース情報が表示されます。
この他の画面では、カテゴリ毎に情報が細分化され、それらの監視項目がグラフィカルに表示されます。以下に、各表示項目について簡潔に説明します。
(※)WebOTXでは、高機能化の実現にあたり、独自にJMX仕様を拡張させたMBeanを使用しています。そのため、そのMBeanを示すツリーノードは画面左側に表示されますが、ノードをクリックした場合、jconsoleでは対応しきれず以下のエラーメッセージが表示されます。
これらのMBeanは通常システム内部でのみ使用するため、ユーザが参照する必要はありません。これらのMBeanは、システム内部および「統合運用管理ツール」や「運用管理コマンド」などから参照されます。
運用管理コマンドを使用して、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 --type summary <サーバ名>
otxadmin> generate-jvm-report --apgroup <アプリケーショングループ名> --pgroup <プロセスグループ名> --type summary <プロセスID>
otxadmin> generate-jvm-report --type summary server オペレーティングシステムの情報: 名前: Windows Server 2008 アーキテクチャ: amd64, バージョン: 6.0 使用可能なプロセッサの数: 2 : Java Runtime Environment (JRE) の一般的な情報: 4364@HOSTNAME [ブートクラスパス] C:\WebOTX/modules/endorsed\javax.annotation.jar C:\WebOTX/modules/endorsed\wows-api.jar C:\Program Files\Java\jdk1.7.0_21\jre\lib\resources.jar C:\Program Files\Java\jdk1.7.0_21\jre\lib\rt.jar : [クラスパス] C:/WebOTX/modules/webotx.jar : [ネイティブライブラリパス] C:/WebOTX/lib C:/Program Files/Java/jdk1.7.0_21/bin C:/Windows/Sun/Java/bin C:/Windows/System32 C:/Windows : JRE 名: Java HotSpot(TM) 64-Bit Server VM ベンダー: Oracle Corporation バージョン: 23.21-b01 システムプロパティのリスト: ANTLR_USE_DIRECT_CLASS_LOADING = true AS_ACC_CONFIG = %ACC_CONFIG% AS_ANT = C:\WebOTX\lib\ant :
コマンドを実行したタイミングでの、JVMが動作するOS情報を始め、設定されているクラスパス(ブートクラスパス、システムクラスパス)やネイティブライブラリパスおよび、システムプロパティなどが一覧形式で表示されます。
otxadmin> generate-jvm-report --type memory <サーバ名>
otxadmin> generate-jvm-report --apgroup <アプリケーショングループ名> --pgroup <プロセスグループ名> --type memory <プロセスID>
otxadmin> generate-jvm-report --type memory server [メモリ情報] ヒープメモリ使用状況: 108,121 K / 172,504 K 全体(確定), 62 % 使用済み [ 65,536 K 初期, 506,816 K 最大] 非ヒープメモリ使用状況: 40,581 K / 71,136 K 全体(確定), 57 % 使用済み [ 65,696 K 初期, 229,376 K 最大] ファイナライズを待機しているオブジェクトの数(概算): 0 [メモリプール情報] Java 仮想マシンの実行時間: 0 時間 4 分 57 秒 Eden Space 36,920 K / 47,616 K 全体(確定), 77 % 使用済み [ 17,472 K 初期, 139,776 K 最大] Code Cache 5,568 K / 5,600 K 全体(確定), 99 % 使用済み [ 160 K 初期, 32,768 K 最大] Perm Gen 35,013 K / 65,536 K 全体(確定), 53 % 使用済み [ 65,536 K 初期, 196,608 K 最大] Survivor Space 0 K / 5,952 K 全体(確定), 0 % 使用済み [ 2,176 K 初期, 17,472 K 最大] Tenured Gen 71,359 K / 118,936 K 全体(確定), 59 % 使用済み [ 43,712 K 初期, 349,568 K 最大] Eden Space +------------------------------------------------------------+ |/////////////// | | 77 % used +------------------------------------------------------------+ |------| init (17,472 K) |--------------| used (36,920 K) |-------------------| committed (47,616 K) |------------------------------------------------------------| max (139,776 K) Code Cache +------------------------------------------------------------+ |/////////| | 99 % used +------------------------------------------------------------+ || init (160 K) |---------| used (5,568 K) |---------| committed (5,600 K) |------------------------------------------------------------| max (32,768 K) : [ガベージコレクション情報] ガベージコレクタの名前: Copy このガベージコレクタを使用してコレクションが発生した回数: 44 回 ガベージコレクションの時間: 0 秒 485 ミリ秒 ガベージコレクタの名前: MarkSweepCompact このガベージコレクタを使用してコレクションが発生した回数: 3 回 ガベージコレクションの時間: 0 秒 363 ミリ秒 :
コマンドを実行したタイミングでの、ヒープ、非ヒープ領域のメモリ使用状況を始め、各メモリプール毎に細分化したメモリ情報のスナップショット、およびそれらの視覚的な表示、ならびにGC動作情報などが一覧形式で表示されます。
JVMベンダや指定されたJVMオプションによって多少メモリプール情報の内容が異なりますが、大抵の場合、次のような内容となります。
また、それぞれの値に示された項目は次のような内容となります。
otxadmin> generate-jvm-report --type class <サーバ名>
otxadmin> generate-jvm-report --apgroup <アプリケーショングループ名> --pgroup <プロセスグループ名> --type class <プロセスID>
otxadmin> generate-jvm-report --type class server **** Class Statistics for Java Virtual Machine [Application Server Instance Name: server] **** Class loading and unloading in the Java Virtual Machine: Number of classes currently loaded in the Java Virtual Machine: 8,135 Number of classes loaded in the Java Virtual Machine since the startup: 8,667 :
コマンドを実行したタイミングでの、ロードおよびアンロードされたクラスのカウント情報などが一覧形式で表示されます。
otxadmin> generate-jvm-report --type thread <サーバ名>
otxadmin> generate-jvm-report --apgroup <アプリケーショングループ名> --pgroup <プロセスグループ名> --type thread <プロセスID>
otxadmin> generate-jvm-report --type thread server **** Thread Dump for Java Virtual Machine [Application Server Instance Name: server] **** Full Java Thread Dump Java HotSpot(TM) Server VM 1.5.0_15-b04 Sun Microsystems Inc. Number of threads: 98 Number of daemon threads: 79 Thread "Thread-739" thread-id 2,309 thread-state RUNNABLE Running in native at: java.net.SocketInputStream.socketRead0(Native Method) at: java.net.SocketInputStream.read(SocketInputStream.java:129) at: jp.co.nec.orb.GIOP.Message.readPartOfMessage(Message.java:944) at: jp.co.nec.orb.GIOP.Message.readOneMessage(Message.java:894) at: jp.co.nec.orb.GIOP.Message.dispatchReceiveMessage(Message.java:823) at: jp.co.nec.orb.ClientReader.run(ClientReader.java:648) at: java.lang.Thread.run(Thread.java:595) Thread "RMI TCP Connection(1360)-HOSTNAME" thread-id 2,308 thread-state RUNNABLE Running in native at: java.net.SocketInputStream.socketRead0(Native Method) at: java.net.SocketInputStream.read(SocketInputStream.java:129) at: java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at: java.io.BufferedInputStream.read(BufferedInputStream.java:235) at: java.io.FilterInputStream.read(FilterInputStream.java:66) at: sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:448) at: sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707) at: java.lang.Thread.run(Thread.java:595) Thread "RMI TCP Connection(1359)-HOSTNAME" thread-id 2,307 thread-state RUNNABLE Running in native at: java.net.SocketInputStream.socketRead0(Native Method) at: java.net.SocketInputStream.read(SocketInputStream.java:129) at: java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at: java.io.BufferedInputStream.read(BufferedInputStream.java:235) at: java.io.FilterInputStream.read(FilterInputStream.java:66) at: sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:448) at: sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707) at: java.lang.Thread.run(Thread.java:595) : No deadlock found
コマンドを実行したタイミングでの、JVM内の全スレッドの動作情報、およびスレッド毎のスタックトレース情報(=スレッドダンプ)などが一覧形式で表示されます。また、JVM内のスレッド間でデッドロックが発生している場合には、その旨を示す内容が続けて表示されます。
プロンプトの設定状況によっては記述の途中で改行されて読み辛くなる場合や、最初の方の出力結果が表示されなくなる場合があります。一方で、出力結果をファイルに保存したい場合があります。その際は、コマンドの実行結果を任意のファイルにリダイレクトする等の方法が有効です。
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) :
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です。
Java用TPPプロセスの監視項目を取得する場合のコマンド指定方法について、幾つかの例を示します。
例) アプリケーショングループ名 : apg、プロセスグループ名 : pg、プロセスID : 12345、取得対象 : summary の場合
otxadmin> generate-jvm-report --type summary apg-pg
otxadmin> generate-jvm-report --type summary apg-pg-12345
otxadmin> generate-jvm-report --apgroup apg --pgroup pg --type summary
otxadmin> generate-jvm-report --apgroup apg --pgroup pg --type summary 12345
コマンドの詳細については、[ generate-jvm-report ]をご覧ください。
JavaプロセスにおけるGC処理の様子をファイルへ出力します。
この方法では、次のJavaプロセスが監視・管理の対象となります。
ドメインに接続後、「<ドメイン名>」-「アプリケーションサーバ」-「JVM構成」を選択し、画面右側に表示される「GC」タブ内の設定項目-「GC情報の出力」にチェックを入れます。この状態では、標準出力用のログファイルであるserver.log(${INSTANCE_ROOT}/logs配下)に出力されますので、任意のファイルにGCログ情報を出力するためには、さらに同タブ内の項目「GC情報の出力先」にて、ファイル出力先のフルパスを指定して下さい(ファイル名のみ指定した場合は、${INSTANCE_ROOT}/config配下に出力されます)。
設定後、「更新」ボタンを押します。設定は、ドメインの再起動後に反映されます。
ドメインにログイン後、次のコマンドを実行します。
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情報を参照するためには、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のベンダによってその出力形式が異なるため、解析の際には各ベンダが提供する専用のツールなどをご利用ください。