Java SE 監視および管理の概要
この章では、Java Platform, Standard Edition (Java SE プラットフォーム) に監視と管理の両サービスを提供する機能およびユーティリティーを説明します。ここで紹介する機能の詳細については、このガイドの次の章を参照してください。
主な監視および管理機能
Java SE プラットフォームには、重要な監視および管理機能が用意されています。これらの機能は、大きく 4 つに分類されます。
-
Java 仮想マシン (Java VM) のインストゥルメンテーション。
-
監視および管理アプリケーションプログラミングインタフェース (API)。
-
監視および管理ツール。
-
Java Management Extensions (JMX) テクノロジ。
これらの監視および管理機能の分類についての詳細は、次のセクションを参照してください。
Java VM インストゥルメンテーション
Java VM は、監視および管理を目的として計測され、ローカルアクセスやリモートアクセスを実現する組み込み型の (または、追加設定不要 (アウトオブボックス) な) 管理機能を有効にします。詳細は、第 2 章「JMX テクノロジを使用する監視と管理」と第 5 章「SNMP 監視と管理」を参照してください。
Java VM には、JMX 仕様に準拠した管理アプリケーションで使用されるプラットフォーム MBean サーバーとプラットフォーム MBean が用意されています。これらは、監視および管理 API (次のセクションに記載) の実装です。プラットフォーム MXBean と MBean サーバーについては、プラットフォーム MXBean とプラットフォーム MBean サーバーを参照してください。
サンプルコードは、JDK_HOME/demo/management ディレクトリに格納されています。ここで JDK_HOME は Java Development Kit (JDK) がインストールされているディレクトリです。
監視および管理 API
java.lang.management パッケージでは、Java VM の監視および管理を行うインタフェースを提供します。この API では、次の種類の情報にアクセスします。
-
ロードされたクラスと実行中のスレッドの数。
-
Java VM の稼働時間、システムプロパティー、VM 入力引数。
-
スレッド状態、スレッドコンテンション統計、ライブスレッドのスタックトレース。
-
メモリー消費。
-
ガベージコレクションの統計。
-
ローメモリーの検出。
-
オンデマンドデッドロックの検出。
-
オペレーティングシステム情報。
java.lang.management API に加え、java.util.logging.LoggingMXBean API では、ロギングの監視および管理が可能です。
監視および管理ツール
Java SE プラットフォームには、JConsole と呼ばれる監視用グラフィカルツールが用意されています。JConsole には JMX API が実装されており、パフォーマンスを最大限に発揮させるための情報を提供することにより、Java VM と計測されたアプリケーションのパフォーマンス監視を可能にします。J2SE プラットフォームのバージョン 5.0 に用意されている JConsole は、Java SE プラットフォームのバージョン 6 において公式にサポートされる機能となりました。
この 2 つの Java SE プラットフォームのリリース間で JConsole に追加された拡張機能の一部は、次のとおりです。
-
JConsole プラグインサポート: アプリケーションの MBean にアクセスする際に必要なカスタムタブを追加するなど、JConsole で実行される独自のプラグイン構築が可能となります。
-
動的接続機能: Java SE プラットフォームのバージョン 6 に追加された Attach API をサポートするアプリケーションに JConsole が接続可能となります。
-
強化されたユーザーインタフェース: データアクセスをさらに簡単にします。
-
新しい「概要」タブおよび「VM の概要」タブ: 使用中の Java VM に関する全体情報をよりわかりやすく表示します。
-
HotSpot 診断 MBean: 実行時にヒープダンプを要求し、また一部の VM オプションの設定変更を行う API が用意されています。
-
強化された MBean プレゼンテーション: MBean の操作や属性に対するアクセスを簡単にします。
JConsole の全般については、第 3 章「JConsole の使用」を参照してください。
ほかのコマンド行ツールは、Java SE プラットフォームでも使用することができます。詳細は、JDK 開発ツールのドキュメント内にある「監視ツール」セクションを参照してください。
Java Management Extensions (JMX) テクノロジ
Java SE プラットフォームのバージョン 6 では、JMX 仕様のバージョンが 1.4 となります。JMX API では、監視および管理を行うアプリケーションを計測することができます。RMI コネクタでは、JConsole などからこの計測へのリモートアクセスが可能となります。
詳細は、Java SE プラットフォームの JMX テクノロジのドキュメントを参照してください。JMX API の主なコンポーネントの概要については、次のセクションを参照してください。
MBean とは
JMX テクノロジの MBean は、管理対象 Bean、すなわち管理されるリソースを表す Java オブジェクトです。MBean には管理インタフェースが設けられており、このインタフェースは次の要素で構成されます。
-
読み出しや書き込み可能な名前付きおよび型付き属性。
-
呼び出し可能な名前付きおよび型付き操作。
-
MBean が送出可能な型付き通知。
たとえば、アプリケーションの構成を表す MBean には、キャッシュサイズなどのさまざまな構成パラメータを表す属性が用意されています。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 サーバーが含まれています。詳細は、第 4 章「プラットフォーム MBean サーバーとプラットフォーム MXBean の使用」を参照してください。
MBean の作成および登録
MBean は 2 とおりの方法で作成できます。1 つ目の方法では、MBean である Java オブジェクトを作成し、registerMBean メソッドでそのオブジェクトを MBean サーバーに登録します。もう 1 つの方法では、createMBean メソッドの 1 つを使用して単一操作で MBean の作成および登録を行います。
registerMBean メソッドは、ローカルでの使用を目的とした単純な構造となっていますが、リモートで使用することはできません。createMBean メソッドは、リモートで使用することができますが、場合によってクラスローディングの問題に注意を払う必要があります。MBean サーバーで MBeanRegistration インタフェースを実装している状態で MBean をその MBean サーバーに登録またはそのサーバーから登録解除するときは、その MBean でアクションを実行することができます。
アプリケーションの計測
JMX API で管理用アプリケーションを計測する一般的な手順については、ほかのドキュメントを参照してください。詳細は、Java Management Extensions (JMX) テクノロジのドキュメントを参照してください。
プラットフォーム MXBean
プラットフォーム MXBean は、Java Runtime Environment (JRE) の Java VM とその他のコンポーネントを監視および管理する 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 ごとのインスタンス数 |
---|---|---|---|
ClassLoadingMXBean |
クラスローディングシステム |
java.lang:type= ClassLoading |
1 |
CompilationMXBean |
コンパイルシステム |
java.lang:type= Compilation |
0 または 1 |
GarbageCollectorMXBean |
ガベージコレクタ |
java.lang:type= GarbageCollector、name=collectorName |
1 個以上 |
LoggingMXBean |
ロギングシステム |
java.util.logging:type =Logging |
1 |
MemoryManagerMXBean (GarbageCollectorMXBean のサブインタフェース) |
メモリープール |
java.lang:typeMemoryManager、name=managerName |
1 個以上 |
MemoryPoolMXBean |
メモリー |
java.lang:type= MemoryPool、name=poolName |
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 |
プラットフォーム 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 サーバーを介して公開され、ネットワークはより簡単に公開したり、検出することができるようになります。