返回

使用遠端 JMX 建置並執行原生執行檔

在使用 GraalVM Native Image 建置的原生應用程式中,可以使用 Java Management Extensions (JMX) 進行遠端管理。

注意:此功能為實驗性質。

本指南涵蓋使用 JMX 建置、執行及與原生執行檔互動所需的步驟。它還會示範如何向 JMX 伺服器註冊自訂受管理 Bean (MBean),以及讓它在 Native Image 中運作所需的額外步驟。

目前支援的功能和限制

支援從用戶端到遠端 MBean 伺服器的 JMX 連線。用戶端、伺服器或兩者都可以是原生執行檔。僅支援 MXBeans 和標準使用者定義的 MBean。不支援動態和模型 MBean,因為它們的管理介面是在執行階段定義的。雖然支援 MXBeans 的遠端管理,但並非所有平台 MXBean 功能都在 Native Image 產生的原生執行檔中實作或適用。此外,若要定義和使用標準 MBean,您必須指定中繼資料設定。本指南將進一步說明這一點。

執行示範

先決條件

請確保您已安裝 GraalVM JDK。最容易上手的方法是使用 SDKMAN!。如需其他安裝選項,請造訪下載區段

  1. 將以下程式碼儲存到名為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;
             }
         }
     }
    
  2. 將您的工作目錄變更為您儲存檔案的位置。然後使用 GraalVM JDK 編譯應用程式
     javac SimpleJmx.java
    

    這會建立SimpleJmx.classSimpleJmx$Simple.classSimpleJmx$SimpleMBean.class 檔案。

  3. 新增動態代理設定。JMX 使用動態代理,這是 Java 的動態功能,以存取 MBean。為了能夠在執行階段與自訂 SimpleMBean 互動,您需要為 MBean 介面提供 Native Image 其他的動態代理中繼資料。為此,請建立或修改名為 reachability-metadata.json 的 JSON 檔案,其內容如下
     {
       "reflection": [
         {
           "type": {
             "proxy": ["SimpleJmx$SimpleMBean"]
           }
         }
       ]
     }
    
  4. 建置已啟用 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

  5. 使用 JMX 屬性執行您的原生執行檔
     ./simplejmx -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9996 -Dcom.sun.management.jmxremote.ssl=false
    

    這會將應用程式啟動為簡單的 JMX 伺服器,沒有密碼驗證或 SSL,使用連接埠 9996。您可以設定 JMX 來套用本指南中顯示的所有常用屬性,但此範例為了簡單起見,使用了基本設定。

現在 JMX 伺服器正在執行,請使用 VisualVM 檢查 MBean。

使用 VisualVM 檢查 MBean

  1. 啟動 VisualVM 以使用者友善的方式檢視受管理 Bean。

  2. 請確保您已安裝VisualVM-MBeans 外掛程式(前往工具,然後外掛程式,在可用外掛程式下,選取 VisualVM-MBeans,然後按一下安裝)。

  3. 前往應用程式索引標籤,然後選取 SimpleJmx 程序。從那裡您可以選取 MBeans 索引標籤。

    Remote JMX

  4. MBeans 索引標籤中,您可以檢查您先前建立的自訂 MBean,並對其執行操作。

    Custom MBean Attributes

    Custom MBean Operations

總而言之,Native Image 提供使用 JMX 進行遠端管理的功能。使用者可以在原生執行檔中啟用 JMX 代理程式,以監控在遠端系統上執行的用戶端應用程式。

與我們聯繫