モジュール java.management

パッケージ java.lang.management

Java実行時にJava仮想マシンおよびほかのコンポーネントを監視および管理するための管理インタフェースを提供します。 この管理インタフェースを使用すると、実行しているJava仮想マシンをローカルおよびリモートに監視および管理できます。

プラットフォームMXBean

プラットフォームMXBeanは、JMXインストゥルメンテーション仕様に適合する管理Beanであり、基本データ型のセットだけを使用します。 各プラットフォームMXBeanは、一意の名前を持つPlatformManagedObjectです。

ManagementFactory

ManagementFactoryクラスは、Javaプラットフォームの管理ファクトリ・クラスです。 このクラスは、JavaプラットフォームのMXBeanを取得する一連のstaticファクトリ・メソッドを提供し、アプリケーションでMXBeanに直接アクセスできるようにします。

プラットフォームMBeanServerにアクセスするには、getPlatformMBeanServerメソッドを使用します。 このメソッドの1回目の呼出しで、プラットフォームMBeanServerを作成し、プラットフォームMXBeanを含むすべてのプラットフォームMXBeanを登録します。 各プラットフォームMXBeanは、管理インタフェースの仕様で定義されている一意の名前で登録されます。 これは単一のMBeanServerであり、同じJava仮想マシン内で実行されているさまざまな管理対象コンポーネントによって共有されることがあります。

相互運用性

実行中の仮想マシンの管理アプリケーションとプラットフォームMBeanServerは、プラットフォームMXBeanインタフェースで使用されるクラスを必要とすることなく相互運用できます。 JMXコネクタ・サーバーとコネクタ・クライアントの間で転送されるデータ型は、JMX 公開型であり、これによってバージョン間の相互運用が可能です。 MXBeanインタフェースで使用されるデータ型は、MBeanServerインタフェースによるアクセス時に、公開型にマップされます。 詳細は、「MXBean仕様」を参照してください。

MXBeanにアクセスする方法

アプリケーションは、次の方法でJava仮想マシンのインストゥルメンテーションとランタイムを監視できます。

1. MXBeanインタフェースへの直接アクセス

  • 実行中のJava仮想マシンでローカルにMXBeanインスタンスを取得します。
       RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
    
       // Get the standard attribute "VmVendor"
       String vendor = mxbean.getVmVendor();
    

    あるいは、getPlatformMXBeanまたはgetPlatformMXBeansメソッドを呼び出します。

       RuntimeMXBean mxbean = ManagementFactory.getPlatformMXBean(RuntimeMXBean.class);
    
       // Get the standard attribute "VmVendor"
       String vendor = mxbean.getVmVendor();
    

  • 指定されたMBeanServerにメソッド呼出しを転送するMXBeanプロキシ・インスタンスを構築します。
       MBeanServerConnection mbs;
    
       // Connect to a running JVM (or itself) and get MBeanServerConnection
       // that has the JVM MBeans registered in it
       ...
    
       // Get a MBean proxy for RuntimeMXBean interface
       RuntimeMXBean proxy =
           ManagementFactory.getPlatformMXBean(mbs,
                                               RuntimeMXBean.class);
       // Get standard attribute "VmVendor"
       String vendor = proxy.getVmVendor();
    

    プロキシは通常、リモートのJava仮想マシン内のMXBeanにアクセスするために使用されます。 MXBeanプロキシは次の方法で作成することもできます。

       RuntimeMXBean proxy =
           ManagementFactory.newPlatformMXBeanProxy(mbs,
                                                    ManagementFactory.RUNTIME_MXBEAN_NAME,
                                                    RuntimeMXBean.class);
    

2. MBeanServerを介したMXBeanインタフェースへの間接アクセス

  • プラットフォームMBeanServerでMXBeanにローカル・アクセスするか、または特定のMBeanServerConnectionでMXBeanにリモート・アクセスします。 MXBeanの属性や操作で使用されるのはJMX公開型だけですが、これには、OpenTypeに定義された基本データ型、CompositeData、およびTabularDataが含まれます。
       MBeanServerConnection mbs;
    
       // Connect to a running JVM (or itself) and get MBeanServerConnection
       // that has the JVM MXBeans registered in it
       ...
    
       try {
           // Assuming the RuntimeMXBean has been registered in mbs
           ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);
    
           // Get standard attribute "VmVendor"
           String vendor = (String) mbs.getAttribute(oname, "VmVendor");
       } catch (....) {
           // Catch the exceptions thrown by ObjectName constructor
           // and MBeanServer.getAttribute method
           ...
       }
    

プラットフォームの拡張

Java仮想マシンの実装では、標準の管理インタフェースを拡張してプラットフォーム固有のメトリックスと管理操作を追加するプラットフォーム依存のインタフェースを定義することで、管理インタフェースにプラットフォームの拡張を追加できます。 ManagementFactoryクラスのstaticファクトリ・メソッドは、プラットフォーム拡張機能を備えたMXBeanを返します。

ベンダーの名前などベンダー固有の接頭辞を使ってプラットフォーム固有の属性に名前を付けて、標準管理インタフェースの将来の拡張と、このプラットフォーム拡張の間で属性の名前の衝突が発生しないようにすることをお薦めします。 標準管理インタフェースに対する将来の拡張が、管理インタフェースの新しい属性を定義し、属性名がベンダー固有の属性の名前と同じことがわかった場合、バージョニングと互換性の問題に対処するために、ベンダー固有の属性にアクセスしているアプリケーションを変更する必要があります。

以下の例は、プラットフォーム拡張の属性にアクセスする方法を示しています。

1) Oracle固有のMXBeanインタフェースへの直接アクセス

   List<com.sun.management.GarbageCollectorMXBean> mxbeans =
       ManagementFactory.getPlatformMXBeans(com.sun.management.GarbageCollectorMXBean.class);

   for (com.sun.management.GarbageCollectorMXBean gc : mxbeans) {
       // Get the standard attribute "CollectionCount"
       String count = mxbean.getCollectionCount();

       // Get the platform-specific attribute "LastGcInfo"
       GcInfo gcinfo = gc.getLastGcInfo();
       ...
   }

2)プロキシ経由でMBeanServerを使った、Oracle固有のMXBeanインタフェースへのアクセス

   MBeanServerConnection mbs;

   // Connect to a running JVM (or itself) and get MBeanServerConnection
   // that has the JVM MXBeans registered in it
   ...

   List<com.sun.management.GarbageCollectorMXBean> mxbeans =
       ManagementFactory.getPlatformMXBeans(mbs, com.sun.management.GarbageCollectorMXBean.class);

   for (com.sun.management.GarbageCollectorMXBean gc : mxbeans) {
       // Get the standard attribute "CollectionCount"
       String count = mxbean.getCollectionCount();

       // Get the platform-specific attribute "LastGcInfo"
       GcInfo gcinfo = gc.getLastGcInfo();
       ...
   }

ほかで指定がない場合、null引数をこのパッケージの任意のクラスまたはインタフェースのメソッドまたはコンストラクタへ渡すと、NullPointerExceptionがスローされます。

java.lang.management APIはスレッドセーフです。

導入されたバージョン:
1.5