JDKダウンロードに含まれるもう1つの便利なツールは、JConsoleモニタリング・ツールです。このツールはJMXに準拠しています。このツールは、JVMの組込みJMXインストゥルメンテーションを使用して、実行中のアプリケーションのパフォーマンスやリソース消費に関する情報を提供します。このツールは、JDKダウンロードに含まれてはいますが、JREで配備されたアプリケーションのモニターや管理にも使用できます。
JConsoleツールは、スレッド使用量やメモリー消費量などの有用な情報、およびクラス・ロード、実行時コンパイル、オペレーティング・システムに関する詳細情報を表示する目的で、任意のJavaアプリケーションに接続できます。
この出力は、メモリー・リーク、過剰なクラス・ロードや実行中のスレッドなどの問題の高レベルの診断に役立ちます。これは、チューニングやヒープ・サイズ決定にも役立つ可能性があります。
JConsoleを使えば、モニタリングだけでなく、実行中のシステム内のいくつかのパラメータを動的に変更することもできます。たとえば、-verbose:gc
オプションの設定を変更できるので、実行中のアプリケーションに対するガベージ・コレクションのトレース出力を動的に有効または無効にできます。
詳細は、jconsole
コマンドのマニュアル・ページを参照してください。FAQは、JConsoleとJavaプラットフォームのリモート管理に関するFAQを参照してください。
次の項では、JConsoleツールによるトラブルシューティング手法について説明します。
次のリストは、JConsoleツールを使ってモニターできるデータの概要を示しています。各見出しはツール内のタブ・ペインに対応しています。JConsoleツールの使用方法の詳細は、JConsoleの使用を参照してください。
概要
このペインには、ヒープ・メモリー使用量、スレッド数、クラス数、およびCPU使用率の経時的推移を示すグラフが表示されます。この概要では、いくつかのリソースのアクティビティを一度に視覚化できます。
メモリー
選択された1つのメモリー領域(ヒープ、非ヒープ、各種メモリー・プール)について
メモリー使用量の経時的推移を示すグラフ
現在のメモリー・サイズ
コミットされたメモリーの量
最大メモリー・サイズ
ガベージ・コレクタの情報(実行されたコレクションの回数や、ガベージ・コレクションの実行に費やされた合計時間など)
現在使用中のヒープおよび非ヒープ・メモリーのパーセントを示すグラフ
さらにこのペインでは、ガベージ・コレクションの実行を要求できます。
スレッド
スレッド使用量の経時的推移を示すグラフ。
ライブ・スレッド: 現在のライブ・スレッド数。
ピーク: JVM起動後のライブ・スレッドの最大数。
選択された1つのスレッドの名前、状態、およびスタック・トレース、およびブロックされたスレッドの場合は、スレッドが獲得を待機しているシンクロナイザとロックを所有しているスレッド。
「デッドロックの検出」ボタンは、デッドロック検出を実行する要求をターゲット・アプリケーションに送信し、各デッドロック・サイクルをそれぞれ異なるタブに表示します。
クラス
ロード済クラス数の経時的推移を示すグラフ
現在メモリーにロードされているクラスの数
JVMの起動後にメモリーにロードされたクラスの合計数(その後アンロードされたものも含む)
JVMの起動後にメモリーからアンロードされたクラスの合計数
VMサマリー
一般的な情報(JConsole接続データ、JVMの稼働時間、JVMで消費されたCPU時間、コンパイラ名や合計コンパイル時間など)。
スレッドおよびクラスのサマリー情報
メモリーおよびガベージ・コレクションの情報(ファイナライズ保留中のオブジェクトの数など)
オペレーティング・システムに関する情報(物理特性、実行中のプロセス用の仮想メモリー量、スワップ領域など)
JVM自体に関する情報(引数やクラス・パスなど)
MBeans
このペインには、接続済みのJMXエージェントに登録されたすべてのプラットフォームおよびアプリケーションMBeanを示すツリー構造が表示されます。ツリー内でMBeanを選択すると、その属性、操作、通知、およびその他の情報が表示されます。
操作(存在する場合)を呼び出せます。たとえば、com.sun.management
ドメインに含まれるHotSpotDiagnostic
MBeanの操作dumpHeap
は、ヒープ・ダンプを実行します。この操作の入力パラメータは、ターゲットVMが実行されているマシン上でのヒープ・ダンプ・ファイルのパス名になります。
書込み可能な属性値を設定できます。たとえば、特定のVMフラグの値を設定、設定解除、または変更するには、HotSpotDiagnostic
MBeanのsetVMOption
操作を呼び出します。フラグは、DiagnosticOptions
属性の値のリストによって示されます。
通知(存在する場合)をサブスクライブするには、「サブスクライブ」および「サブスクライブ解除」ボタンを使用します。
JConsoleは、ローカル・アプリケーションとリモート・アプリケーションの両方をモニターできます。接続先JMXエージェントを指定する引数付きでツールを起動した場合、ツールは指定されたアプリケーションのモニタリングを自動的に開始します。
ローカル・アプリケーションをモニターするには、コマンドjconsole
pid (pidはアプリケーションのプロセスID)を実行します。
リモート・アプリケーションをモニターするには、コマンドjconsole
hostname:
portnumber (hostnameはアプリケーションを実行しているホストの名前、portnumberはJMXエージェントの有効化時に指定したポート番号)を実行します。
jconsole
コマンドを引数なしで実行した場合、このツールはまず、モニター対象のローカルまたはリモート・プロセスを指定するための「新規接続」ウィンドウを表示します。「接続」メニューを使えば別のホストにいつでも接続できます。
最新のJDKリリースでは、モニター対象アプリケーションを起動する際にオプションは不要です。
モニタリング・ツールの出力例として、図2-15はヒープ・メモリー使用量のグラフを示しています。
モニタリングおよび管理機能、およびjconsole
の使用方法の詳細は、Java SEモニタリングおよび管理ガイドを参照してください。