国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java 理論與實踐: 用JMX檢測應用程序

2019-11-18 15:24:10
字體:
來源:轉載
供稿:網友

Java 理論與實踐: 用JMX檢測應用程序(圖一)

  調試器和分析器可以提供對應用程序的行為的深入觀察,但在出現嚴重問題之前,這些工具通常用不上。將監視掛鉤(hook)構建到應用程序內,會使理解程序的執行變得更輕易而且不會破壞調試器。既然 java 治理擴展(JMX)已經構建進了 Java SE 平臺,而且 jconsole 查看器提供了統一的監視 GUI,那么用 JMX 為應用程序提供一個窗口,要比以前更加輕易而且更為有效。

  有多少次您曾經注視著運行中的應用程序,問自己:“它到底在做什么?為什么用了這么長時間呢?” 在這些時刻,您可能會想假如自己在應用程序中構建了更多的監視功能就好了。例如,在服務器應用程序中,能夠查看排隊等候處理的任務的數量和類型、當前正在處理的任務、過去一分鐘或一小時內的吞吐量統計、平均任務處理時間等。這些統計值輕易搜集,但是在需要數據的時候,假如沒有非侵入性的數據檢索機制,那么這些值就不太有用。

  可以用許多方式導出操作性數據——可以把周期性統計快照寫入日志文件、創建 Swing GUI、使用內嵌的 HTTP 服務器在 Web 頁面上顯示統計值或者發布可以用來查詢應用程序的 Web 服務。但是在缺少監視和數據發布基礎設施的情況下,多數應用程序開發人員都做不到這些,因此造成對應用程序工作情況的了解要比預期的少很多。

  JMX

  在 Java 5.0 中,類庫和和 JVM 提供了一種全面的治理和監視基礎設施——JMX。JMX 是一種用來提供可以遠程訪問的治理接口的標準措施,也是一種向應用程序添加靈活且強大的治理接口的簡易方式。被稱作受管 bean(MBean)的 JMX 組件,是提供與實體的治理有關的訪問器和業務方法的 JavaBean。每個受管的實體(可能是整個應用程序或應用程序中的服務)實例化一個 MBean 并用可讀懂的名稱注冊它。支持 JMX 的應用程序依靠于 MBeanServer,它充當 MBean 的容器,提供遠程訪問、命名空間治理和安全服務。在客戶端,jconsole 工具可以充當統一的 JMX 客戶機。結合兩者,對 JMX 的平臺支持極大地降低了使應用程序支持外部治理接口所需的工作和努力。

  除了提供 MBeanServer 實現,Java SE 5.0 還提供 JVM 以更方便地了解內存治理、類裝入、活動線程、日志和平臺配置的狀態。多數平臺服務的監視和治理在默認情況下都是開啟的(性能影響最?。灾恍枰B接應用程序與 JMX 客戶機即可。圖 1 給出了 jconsole JMX 客戶機(JDK 的一部分) ,它顯示了其中一個內存治理視圖——一段時間內的堆使用情況。Perform GC 按鈕則證實了 JMX 可以提供 除了查看操作統計值之外的初始化操作的功能。

Java 理論與實踐: 用JMX檢測應用程序(圖二) 
圖 1. 用 jconsole 查看堆使用情況

  傳輸和安全性

  JMX 指定了在 MBeanServer 和 JMX 客戶之間通信所使用的協議,協議可以在各種傳輸機制上運行。可以使用針對本地連接的內置傳輸,及通過 RMI、socket 或 SSL 的遠程傳輸(可以通過 JMX Connector API 創建新的傳輸)。認證是由傳輸執行的;本地傳輸答應用相同的用戶 ID 連接到運行在本地系統上的 JVM;遠程傳輸可以用口令或證書進行認證。本地傳輸在 Java 6 下默認就是啟用的。要在 Java 5.0 下啟用它,需要在 JVM 啟動時定義系統屬性 com.sun.management.jmxremote?!癕onitoring and Management using JMX” 這份文檔描述了啟用和配置傳輸的配置步驟。

  檢測 Web 服務器

  檢測應用程序來使用 JMX 很輕易。像其他許多遠程調用框架(RMI、EJB 和 JAX-RPC)一樣,JMX 也是基于接口的。要創建治理服務,需要創建指定治理方法的 MBean 接口。然后可以創建一個 MBean 來實現此接口、實例化它及把它注冊到 MBeanServer。

  清單 1 顯示了網絡服務(例如 Web 服務器)的 MBean 接口。它提供了檢索配置信息(例如端口號)和操作性信息(例如服務是否啟動)的 getter。它還包含查看和修改可配置參數(例如當前日志級別)的 getter 和 setter,還有調用治理操作(例如 start() 和 stop())的方法。

  清單 1. 某個 Web 服務器的 MBean 接口

public interface WebServerMBean {
 public int getPort();

 public String getLogLevel();
 public void setLogLevel(String level);

 public boolean isStarted();
 public void stop();
 public void start();
}
  實現 MBean 類通常非常直接明了,因為 MBean 接口要反映現有實體或服務的屬性和治理操作。例如,MBean 中的 getLogLevel() 和 setLogLevel() 方法會直接轉給被 Web 服務器使用的 Logger 上的 getLevel() 和 setLevel() 方法。JMX 做了一些命名限制。例如,MBean 接口名稱必須以 MBean 結尾,FooMBean 接口的 MBean 類必須叫作 Foo。(可以用更高級的 JMX 特性——動態 MBean 來去除這個限制。)把 MBean 注冊到默認的 MBeanServer 也很輕易,如清單 2 所示:

  清單 2. 用內置的 JMX 實現注冊 MBean



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屯昌县| 思茅市| 镇坪县| 靖州| 开封市| 顺义区| 静宁县| 信宜市| 高碑店市| 微山县| 安泽县| 雷州市| 当涂县| 高安市| 池州市| 深州市| 大兴区| 霍州市| 江陵县| 大同市| 卢氏县| 山西省| 绥化市| 阿拉尔市| 丽水市| 麻江县| 阳城县| 康平县| 武邑县| 凤山县| 米脂县| 孟村| 汉中市| 九寨沟县| 东乡族自治县| 太白县| 宁武县| 江山市| 县级市| 克什克腾旗| 壶关县|