J2SE 5.0 から、Java プラットフォームに重要な監視および管理機能が含まれています。
Java 仮想マシン (JVM) は監視と管理のため計測されます。これにより、リモートおよびローカルアクセス用の (すぐに使用できる) 組み込み管理機能を提供します。詳細は、「JMX の監視と管理」および「SNMP の監視と管理」を参照してください。
JVM には、JMX 管理アプリケーションが使用するプラットフォーム MBean サーバ (管理エージェント) およびプラットフォーム MBean が含まれています。これらは以下で説明される監視および管理 API の実装です。
java.lang.management パッケージは、JVM の監視および管理用のインタフェースを提供します。
API により次のような情報にアクセスできます。
API には、ログの監視と管理機能が含まれています。java.util.logging.LoggingMXBean インタフェースは、ログ機能の管理を提供します。
com.sun.management パッケージには、管理 API への Sun Microsystems のプラットフォーム拡張機能が含まれます。
グラフィカルな JMX 監視ツールである jconsole
により、JVM および実装されたアプリケーションのパフォーマンスを監視し、パフォーマンスの最適化に役立つ情報を提供します。詳細は、「jconsole の使用」を参照してください。その他のコマンド行のツールも使用できます。詳細は、「J2SE の監視および管理ツール」を参照してください。
Java Management Extensions (JMX) API バージョン 1.2 - JMX API では、監視と管理用のアプリケーションを実装できます。RMI コネクタにより、この機能にリモートからアクセスできます。従来は拡張機能であったこの API が J2SE に含まれるようになりました。
MBean は、管理対象 Bean、つまり管理されるリソースを表す Java オブジェクトです。MBean には、以下のもので構成される管理インタフェースがあります。
たとえば、アプリケーションの構成を表す MBean には、キャッシュサイズなどさまざまな構成パラメータを表す属性を含めることができます。CacheSize
属性の読み取りによりキャッシュの現在のサイズが返されます。CacheSize
属性の書き込みにより、キャッシュのサイズが更新され、実行中のアプリケーションの動作が変更される可能性があります。save
などの操作により、現在の構成が永続的に保存されます。MBean は、構成が変更されると、ConfigurationChangedNotification
などの通知を送信する場合があります。
MBean には、「標準 MBean」と「動的 MBean」があります。標準 MBean は、JavaBeans コンポーネントモデルから取得した設計パターンに適合する Java オブジェクトです。動的 MBean は、実行時に管理インタフェースを定義します。
標準 MBean は、リソースを公開して、属性と操作により直接管理されるようにします。属性は、「getter」および「setter」メソッドにより公開されます。操作はマネージャが使用できるクラスの他のメソッドです。これらのメソッドはすべて MBean インタフェースで静的に定義され、イントロスペクションを通して JMX エージェントに開示されます。これが新規のリソースを管理可能にする最も簡単な方法です。
動的 MBean は、実行時に管理インタフェースを定義する MBean です。たとえば、構成 MBean は、XML ファイルを解析することにより、開示する属性の名前と種類を決めます。
MBean を使いやすくするために MBean サーバ (MBean エージェントとも呼びます) に登録する必要があります。MBean サーバは、MBean のリポジトリです。それぞれの MBean は、MBean サーバ内に一意の名前で登録されます。通常、MBean へは MBean サーバを通してのみアクセスできます。つまり、コードは MBean に直接アクセスするのではなく、MBean サーバを通して名前によってアクセスします。
リリース 5.0 から、J2SE には組み込みのプラットフォーム MBean サーバが含まれます。詳細は、「プラットフォーム MBean サーバの使用」を参照してください。
MBean を作成するには、2 通りの方法があります。1 つは、MBean となる Java オブジェクトを構築し、registerMBean
メソッドを使って、MBean サーバに登録する方法です。もう 1 つは、createMBean
メソッドの 1 つを使用して単一の操作で MBean を作成して登録する方法です。
registerMBean
メソッドは、ローカルで使用する場合はより簡単な方法ですが、リモートでは使用できません。createMBean
メソッドは、リモートで使用できますが、クラスのロードの問題に注意が必要な場合があります。MBean は、MBeanRegistration
インタフェースを実装している場合、MBean サーバに登録したり、MBean サーバから登録を解除するときにアクションを実行できます。
アプリケーションを JMX で計測するための一般的な手順については、このドキュメントでは説明しません。J2SE には、次のような広範な JMX のマニュアルが含まれています。
プラットフォーム MBean (MXBean とも呼ばれる) は、Java 仮想マシン (JVM) の監視と管理のための MBean です。それぞれの MXBean は、JVM のクラスロードシステム、JIT コンパイルシステム、ガベージコレクタなどの JVM 機能の一部を含んでいます。java.lang.management
パッケージは、プラットフォーム MXBean を定義します。
表 1 は、すべてのプラットフォーム MBean とそれらが管理する VM について示しています。それぞれの MXBean には、プラットフォーム MBean サーバへの登録のための一意の javax.management.ObjectName
が含まれます。JVM には、表に示したように、各関数に基づいて、0、1、または複数の MXBean のインスタンスが含まれます。
インタフェース | 管理対象 | オブジェクト名 | VM ごとのインスタンス |
---|---|---|---|
ClassLoadingMXBean |
クラスロードシステム | java.lang:type=ClassLoading |
1 |
CompilationMXBean |
コンパイルシステム | java.lang:type=Compilation |
0 または 1 |
GarbageCollectorMXBean |
ガベージコレクタ | java.lang:type=GarbageCollector, |
1 または複数 |
MemoryManagerMXBean (GarbageCollectorMXBean のサブインタフェース) |
メモリプール | java.lang:type=MemoryManager, |
1 または複数 |
MemoryPoolMXBean |
メモリ |
java.lang:type=MemoryPool, |
1 または複数 |
MemoryMXBean |
メモリシステム | java.lang:type=Memory |
1 |
OperatingSystemMXBean |
基盤となるオペレーティングシステム |
java.lang:type=OperatingSystem |
1 |
RuntimeMXBean |
実行システム | java.lang:type=Runtime |
1 |
ThreadMXBean |
スレッドシステム | java.lang:type=Threading |
1 |
プラットフォーム MBean サーバ は、同じ Java 仮想マシン内で動作するさまざまな管理対象コンポーネントによって共有できます。プラットフォーム MBean サーバには、メソッド ManagementFactory.getPlatformMBeanServer()
によってアクセスできます。このメソッドへの最初の呼び出しにより、プラットフォーム MBeanServer が作成され、一意の ObjectName を使って、プラットフォーム MXBean を登録します。その後、最初に作成したプラットフォーム MBeanServer を返します。
動的に作成され、破棄される MXBean (メモリプールやマネージャなど) は、MBeanServer に自動的に登録または登録解除されます。システムプロパティ javax.management.builder.initial が設定されている場合、プラットフォーム MBeanServer は、指定された MBeanServerBuilder
によって作成されます。
プラットフォーム MBeanServer を使用して、プラットフォーム MXBean に加えて、他の MBean を登録します。これにより、同じ MBeanServer を使ってすべての MBean を公開でき、ネットワークでの公開と検出がより簡単になります。
LoggingMXBean により、次のことができます。
LoggingMXBean の一意の ObjectName は、java.util.logging:type=Logging
で、LogManager.LOGGING_MXBEAN_NAME に含まれています。
LoggingMXBean には 1 つのグローバルインスタンスがあり、LogManager.getLoggingMXBean()
を呼び出すことによって取得できます。