1 Java SEモニタリングおよび管理の概要
このトピックでは、Java Platform, Standard Edition (Java SEプラットフォーム)にモニタリングと管理のサービスを提供する機能およびユーティリティを説明します。
主なモニタリングおよび管理機能
Java SEプラットフォームには、重要なモニタリングおよび管理機能が用意されています。これらの機能は、大きく4つに分類されます。
Java仮想マシンのインストゥルメンテーション
Java仮想マシン(Java VM)は、モニタリングおよび管理を目的として計測され、ローカル・アクセスやリモート・アクセスを実現する組込み型の(または、すぐに使用できる)管理機能を有効にします。
「JMXテクノロジを使用するモニタリングと管理」を参照してください。
Java VMには、Java Management Extensions (JMX)仕様に準拠した管理アプリケーションで使用されるプラットフォームMBeanサーバーとプラットフォームMBeanが用意されています。これらのプラットフォームは、モニタリングおよび管理APIの実装です。プラットフォームMXBeanとMBeanサーバーについては、プラットフォームMXBeanおよびプラットフォームMBeanサーバーのトピックを参照してください。
モニタリングおよび管理API
Java SE にはモニタリングと管理を行うための次のAPIが含まれています。
- java.lang.management: Java仮想マシンおよびその基盤となるオペレーティング・システムのモニタリングと管理を有効にします。このAPIにより、アプリケーションによる自己モニターが可能になり、JMXに準拠したツールで仮想マシンのモニターと管理をローカルおよびリモートに行うことができます。このAPIでは、次の種類の情報にアクセスします。
                           - 
                                 
                                 ロードされたクラスと実行中のスレッドの数 
- 
                                 
                                 Java VMの稼働時間、システム・プロパティ、VM入力引数 
- 
                                 
                                 スレッド状態、スレッド競合統計、ライブ・スレッドのスタック・トレース 
- 
                                 
                                 メモリー消費 
- 
                                 
                                 ガベージ・コレクションの統計 
- 
                                 
                                 ロー・メモリーの検出 
- 
                                 
                                 オンデマンド・デッドロックの検出 
- 
                                 
                                 オペレーティング・システム情報 
 
- 
                                 
                                 
- 
                           Attach: 管理エージェントを仮想マシンに動的にロードできます。 
- 
                           JConsole: JConsoleにアクセスするプログラム・インタフェース(JConsoleプラグインの追加など)を提供します。 
モニタリングおよび管理ツール
Java SEプラットフォームには、 JConsoleと呼ばれるモニタリング用グラフィカル・ツールが用意されています。JConsoleは、JMX APIを実装し、Java VMと計測されたアプリケーションのパフォーマンスのモニターを可能にします。パフォーマンスの最適化に役立つ情報が提供されます。
JConsoleの拡張機能には、次のようなものがあります。
- 
                           JConsoleプラグイン・サポート: 独自のプラグインを作成してJConsoleで実行することを可能にします。たとえば、アプリケーションのMBeanにアクセスするために、カスタム・タブを追加できます。 
- 
                           動的接続機能: Attach APIをサポートする任意のアプリケーションにJConsoleを接続できるようにします。 
- 
                           強化されたユーザー・インタフェース: データ・アクセスをさらに簡単にします。 
- 
                           新しい「概要」タブおよび「VMの概要」タブ: 使用中のJava VMに関する全体情報をよりわかりやすく表示します。 
- 
                           HotSpot診断MBean: 実行時にヒープ・ダンプを要求し、また一部のVMオプションの設定変更を行うAPIが用意されています。 
- 
                           強化されたMBeanプレゼンテーション: MBeanの操作や属性に対するアクセスを簡単にします。 
JConsoleの詳細は、JConsoleの使用のトピックを参照してください。
ほかのコマンド行ツールは、Java SEプラットフォームでも使用することができます。
Java Management Extensionsテクノロジ
Java SEプラットフォームのリリース22には、Java Management Extensions (JMX)仕様バージョン1.4が含まれています。JMX APIでは、モニタリングおよび管理を行うアプリケーションを計測することができます。Remote Method Invocation (RMI)コネクタでは、JConsoleなどを使用して、この計測へのリモート・アクセスが可能となります。
Java Platform, Standard Edition Java Management ExtensionsガイドのJMXテクノロジのドキュメントを参照してください。
次の項では、JMX APIの主なコンポーネントの概要について説明します。
MBeanとは
JMXテクノロジのMBeanは、managed beans、すなわち管理されるリソースを表すJavaオブジェクトです。MBeanには管理インタフェースが設けられており、このインタフェースは次の要素で構成されます。
- 
                              読出しや書込み可能な名前付きおよび型付き属性。 
- 
                              呼出し可能な名前付きおよび型付き操作。 
- 
                              MBeanが送出可能な型付き通知。 
たとえば、アプリケーションの構成を表すMBeanには、CacheSizeなどの様々な構成パラメータを表す属性が用意されています。CacheSize属性を読み取ることにより、現在のキャッシュ・サイズが返されます。CacheSizeの書込みを行うと、キャッシュのサイズが更新され、実行中のアプリケーションの動作が変わる可能性があります。saveなどの操作では、現在の構成が永続的に格納されます。構成が変更されたときは、MBeanからConfigurationChangedNotificationなどの通知を送信できます。
                        
MBeanは、標準または動的なものとなります。標準MBeanは、JavaBeansコンポーネント・モデルに由来する、設計パターンに準拠したJavaオブジェクトです。動的MBeanでは、実行時にその管理インタフェースを定義します。MXBeanと呼ばれる別の種類のMBeanもJavaプラットフォームに追加されています。
- 
                              標準MBeanでは、その属性と操作を通じて直接管理を行うリソースが公開されます。属性は、 getterメソッドやsetterメソッドを通じて公開されます。操作は、クラスのその他のメソッドのうち、管理側で利用可能なメソッドです。これらのメソッドはすべてMBeanインタフェースに静的に定義されており、JMXエージェントでは、イントロスペクションを通じてこれらのメソッドを確認できます。このメソッドが新しいリソースを管理可能にする最もわかりやすい方法です。
- 
                              動的MBeanは、その管理インタフェースを実行時に定義するMBeanです。たとえば、構成MBeanは、XMLファイルの解析により、公開する属性の名前と型を決定します。 
- 
                              MXBeanはMBeanの一種であり、定義済の型セットのみを参照するMBeanのコーディングを簡単に行う方法を提供します。この方法では、任意のクライアントがMBeanを使用できます。これにはリモート・クライアントが含まれ、MBeanの種類を示すモデル固有のクラスにアクセスする必要はありません。プラットフォームMBeanは、すべてMXBeanです。 
MBeanサーバー
有効にするには、MBeanをMBeanサーバーに登録する必要があります。MBeanサーバーは、MBeanのリポジトリです。各MBeanは、MBeanサーバー内の一意の名前を使用して登録されます。MBeanには、通常MBeanサーバーを経由してのみアクセスします。すなわち、コードはMBeanに直接アクセスするのではなく、名前を使用することにより、MBeanサーバー経由でMBeanにアクセスします。
Java SEプラットフォームには、組込み型のプラットフォームMBeanサーバーが含まれています。プラットフォームMBeanサーバーとプラットフォームMXBeanの使用を参照してください。
MBeanの作成および登録
MBeanは2とおりの方法で作成できます。1つ目の方法では、MBeanであるJavaオブジェクトを作成し、registerMBeanメソッドでそのオブジェクトをMBeanサーバーに登録します。もう1つのメソッドでは、createMBeanメソッドの1つを使用して単一の操作でMBeanの作成および登録を行います。
                        
registerMBeanメソッドは、ローカルでの使用を目的とした単純な構造となっていますが、リモートで使用することはできません。createMBeanメソッドはリモートで使用できますが、場合によってクラス・ローディングの問題に注意を払う必要があります。MBeanサーバーでMBeanRegistrationインタフェースを実装している状態でMBeanをそのMBeanサーバーに登録またはそのサーバーから登録解除するときは、そのMBeanでアクションを実行することができます。
                        
プラットフォームMXBean
プラットフォームMXBeanは、Java VMに加え、Java Runtime Environmentのその他のコンポーネントをモニタリングおよび管理するMBeanです。各MXBeanでは、クラス・ローディング・システム、Just In Time (JIT)コンパイル・システム、ガベージ・コレクタなどのVM機能の一部をカプセル化します。
表 1-1では、すべてのプラットフォームMXBeanとそれぞれのプラットフォームMXBeanで管理するVMの状態を一覧で示します。各プラットフォームMXBeanには、プラットフォームMBeanサーバーの登録に必要な一意のjavax.management.ObjectNameがあります。Java VMでは、それぞれのMXBeanのインスタンスの数が、表に示すようにMXBeanの機能に応じて0、1、またはそれ以上となります。
                  
表1-1 プラットフォームMXBean
| インタフェース | 管理下にあるVMの区分 | オブジェクト名 | VMごとのインスタンス数 | 
|---|---|---|---|
| 
 | クラス・ローディング・システム | 
 | 1つ | 
| 
 | コンパイル・システム | 
 | ゼロまたは1つ | 
| 
 | ガベージ・コレクタ | 
 | 1つ以上 | 
| 
 | ロギング・システム | 
 | 1つ | 
| 
 | メモリー・プール | 
 | 1つ以上 | 
| 
 | メモリー | 
 | 1つ以上 | 
| 
 | メモリー・システム | 
 | 1つ | 
| 
 | 基盤となるオペレーティング・システム | 
 | 1つ | 
| 
 | ランタイム・システム | 
 | 1つ | 
| 
 | スレッド・システム | 
 | 1つ | 
プラットフォームMXBean (LoggingMXBeanは除く)の詳細は、 java.lang.management APIリファレンスを参照してください。LoggingMXBeanインタフェースについては、java.util.logging APIリファレンスを参照してください。
                  
プラットフォームMBeanサーバー
プラットフォームMBeanサーバーは、同一のJava VM内で実行する、個々に管理されたコンポーネントにより共有することができます。プラットフォームMBeanサーバーには、ManagementFactory.getPlatformMBeanServer()メソッドを使用してアクセスできます。このメソッドに対する1回目の呼出しにより、プラットフォームMBeanサーバーが作成され、このサーバーの一意のオブジェクト名を使用してプラットフォームMXBeanの登録が行われます。その後、このメソッドは、最初に作成したプラットフォームMBeanServerのインスタンスを返します。
                  
動的に作成/破棄されたMXBean (たとえば、メモリー・プールやマネージャ)は、プラットフォームMBeanサーバーで自動的に登録や登録解除が行われます。システム・プロパティjavax.management.builder.initialの設定が行われている場合、プラットフォームMBeanサーバーは、指定のMBeanServerBuilderパラメータを使用して作成されます。
                  
プラットフォームMBeanサーバーを使用してプラットフォームMXBeanの横にあるほかのMBeanの登録を行うことができます。これにより、MBeanはすべて同一のMBeanサーバーを介して公開され、ネットワークをより簡単に公開したり、検出することができるようになります。