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と計測されたアプリケーションのパフォーマンスのモニターを可能にします。JConsoleはJava SE 5.0プラットフォームで導入され、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 プラットフォームのバージョン8には、 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サーバーを介して公開され、ネットワークはより簡単に公開したり、検出することができるようになります。