◀戻る
リモートJMXを使用したネイティブ実行ファイルのビルドと実行
GraalVM Native Imageでビルドされたネイティブアプリケーションでは、Java Management Extensions (JMX)を使用したリモート管理が可能です。
注:この機能は実験的なものです。
このガイドでは、JMXを使用してネイティブ実行ファイルをビルド、実行、および操作するために必要な手順について説明します。また、カスタム管理Bean(MBean)をJMXサーバーに登録する方法と、Native Imageで動作させるために必要な追加の手順についても説明します。
現在サポートされている機能と制限事項
クライアントからリモートMBeanサーバーへのJMX接続がサポートされています。クライアント、サーバー、またはその両方がネイティブ実行ファイルである可能性があります。MXBeanと標準のユーザー定義MBeanのみがサポートされています。動的MBeanとモデルMBeanは、管理インターフェースが実行時に定義されるため、サポートされていません。MXBeanのリモート管理はサポートされていますが、すべてのプラットフォームMXBean機能が実装されているわけではなく、Native Imageによって生成されたネイティブ実行ファイルに適用できるわけでもありません。さらに、標準MBeanを定義して使用するには、メタデータ構成を指定する必要があります。これについては、このガイドで詳しく説明します。
デモを実行する
前提条件
GraalVM JDKがインストールされていることを確認してください。最も簡単な開始方法は、SDKMAN!を使用することです。その他のインストールオプションについては、ダウンロードセクションをご覧ください。
- 次のコードを*SimpleJmx.java*という名前のファイルに保存します。アプリケーションの`main()`メソッドはカスタムMBeanを登録し、その後無限ループを実行するため、VisualVMを使用してプロセスを検査する時間があります。
import javax.management.MBeanServer; import javax.management.ObjectName; import java.lang.management.ManagementFactory; public class SimpleJmx { public static void main(String args[]) throws Exception { ObjectName objectName = new ObjectName("com.jmx.test.basic:name=simple"); Simple simple = new Simple(); simple.setName("someName"); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); server.registerMBean(simple, objectName); while (true) { Thread.sleep(1000); System.out.println("JMX server running..."); } } public static interface SimpleMBean { String getName(); void setName(String name); String print(); } static class Simple implements SimpleMBean { private String name; @Override public String getName() { return name; } @Override public void setName(String name) { this.name = name; } @Override public String print() { return "Print output " + name; } } }
- 作業ディレクトリをファイルを保存した場所に 변경하십시오。次に、GraalVM JDKを使用してアプリケーションをコンパイルします
javac SimpleJmx.java
これにより、*SimpleJmx.class*、*SimpleJmx $ Simple.class*、および*SimpleJmx $ SimpleMBean.class*ファイルが作成されます。
- 動的プロキシ設定を追加します。JMXは、MBeanにアクセスするために、Javaの動的機能である動的プロキシを使用します。実行時にカスタム`SimpleMBean`と対話できるようにするには、Native ImageにMBeanインターフェースの追加の動的プロキシメタデータを提供する必要があります。このためには、次の内容で*reachability-metadata.json*という名前のJSONファイルを作成または変更します
{ "reflection": [ { "type": { "proxy": ["SimpleJmx$SimpleMBean"] } } ] }
- VM監視を有効にしてネイティブ実行ファイルをビルドし、JSON設定ファイルを`native-image`に渡します
native-image --enable-monitoring=jmxserver,jmxclient,jvmstat -H:DynamicProxyConfigurationFiles=proxy-config.json SimpleJmx
`--enable-monitoring=jmxserver`オプションは、JMXサーバー機能(着信接続を受け入れるため)を有効にします。 `--enable-monitoring=jmxclient`オプションは、JMXクライアント機能(発信接続を行うため)を有効にします。両方の機能は、カンマ区切りで一緒に使用できます。たとえば、`--enable-monitoring=jmxserver,jmxclient`です。 VisualVMやその他のJVMによる検出を有効にする場合は、`jvmstat`オプションも含める必要があります:`--enable-monitoring=jmxserver,jmxclient,jvmstat`。
- JMXプロパティを使用してネイティブ実行ファイルを実行します
./simplejmx -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9996 -Dcom.sun.management.jmxremote.ssl=false
これは、ポート`9996`を使用して、パスワード認証またはSSLなしでアプリケーションを単純なJMXサーバーとして起動します。このガイドに示されているように、JMXを構成して通常のすべてのプロパティを適用できますが、この例では、簡潔にするために基本的な構成を使用しています。
JMXサーバーが実行されたので、VisualVMを使用してMBeanを検査します。
VisualVMを使用してMBeanを検査する
-
管理対象Beanをユーザーフレンドリーな方法で表示するには、VisualVMを起動します。
-
**VisualVM-MBeansプラグイン**がインストールされていることを確認します(**ツール**に移動し、**プラグイン**で、**利用可能なプラグイン**の下にある**VisualVM-MBeans**を選択して、**インストール**をクリックします)。
-
**アプリケーション**タブに移動し、**SimpleJmx**プロセスを選択します。そこから**MBeans**タブを選択できます。
-
**MBeans**タブで、以前に作成したカスタムMBeanを検査し、操作を実行できます。
結論として、Native ImageはJMXを使用したリモート管理をサポートしています。ユーザーは、ネイティブ実行ファイルでJMXエージェントを有効にして、リモートシステムで実行されているクライアントアプリケーションを監視できます。