用JMX監測JVM的運行參數

翻譯自http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

 用JMX管理你的JVM
JMX是Java管理擴展的縮寫,也是當前Java技術中很核心的一塊,JMX使得構建可擴展、可管理、伸縮性好的Java框架變得更加容易。更重要的是,JMX是J2SE的一部分,也就是說,使用JMX還能獲得很好的兼容性,因爲它是標準Java的一部分
說了這些,也許你對JMX的重要性還是沒有很直觀的認識,那麼當你知道最普及的servlet容器tomcat、大名鼎鼎的開源服務器JBOSS,都是完全基於JMX的,甚至連大部分商用的應用服務器如weblogic,都採用JMX作爲其管理平臺的實現時,你還會懷疑JMX的重要性嗎。還是半信半疑?OK,就連與你朝夕相處的JVM,都是基於JMX架構的!本文就是介紹關於如何用JMX對你的JVM進行管理
1.設置環境變量
可以在命令行以java -Dproperty=value的形式設置環境變量,不過這樣只會對當前命令行窗口有效;或者修改操作系統的環境變量
在以前的Java中,要想利用JMX管理某個JVM應用,必須加上com.sun.management.jmxremote這個系統變量,以告之JVM開放特定端口和協議用於管理。但是Java6已經默認支持JMX了,也就是說:
在過去的Java版本中,假設你要運行Notepad這個程序,必須這麼做:
% cd JDK_HOME/demo/jfc/Notepad
% java -Dcom.sun.management.jmxremote -jar Notepad.jar
而在Java6中,只需敲入% java -jar Notepad.jar 即可,接下來任意JMX兼容的客戶端都可以連接到這個應用進行管理,實現所謂的out-of-the-box管理。(在Windows系統中,出於安全原因,如果要進行本地的監控與管理,你的臨時文件夾目錄必須是NTFS格式的,否則不能提供足夠的訪問控制)
2.運行jconsole
這是一個默認的JMX管理客戶端實現,直接在命令行敲入jconsole即可。jconsole用作相關的調試很方便,但是不適合作爲商用,因爲這東西本身比較佔資源
3.在jconsole裏面就能看到剛剛運行的Notepad了,雙擊連接即可,連接後可以看到該程序運行的各項性能參數


Ok了,就這麼多?非也,以上只是針對本地監視和管理的,也就是在一臺機器上運行監控程序和被監控程序,如果是遠程呢,jconsole不在本機呢?那就比較麻煩一些了
1.遠程的話,首先在運行某個Java程序前,必須加上一些變量參數:com.sun.management.jmxremote.port=portNum
portNum指代RMI連接的端口號。同時,遠程連接必須提供安全保證,所以默認使用基於SSL和TLS的密碼認證
2.設置密碼(單用戶)
將JRE_HOME/lib/management目錄的jmxremote.password.template文件改名爲jmxremote.password,修改文件的訪問權限,只有管理員才能讀寫。然後給不同角色設置密碼,默認已經有兩個角色 monitorRole 和controlRole
3.設置密碼(多用戶)
將JRE_HOME/lib/management目錄的jmxremote.password.template文件拷貝到JRE根目錄並改名爲jmxremote.password;同樣修改權限、設置密碼;然後按以下參數啓動JVM:com.sun.management.jmxremote.password.file=pwFilePath 
其中,pwFilePath是密碼文件的路徑
4.用jconsole連接
如果不用SSL,那麼直接輸入:jconsole hostName:portNum
如果使用SSL,就要加上參數:% java -Djavax.net.ssl.keyStore=keystore -Djavax.net.ssl.keyStorePassword=password Server
這只是驗證了服務器端而已,如果還要驗證SSL客戶端,也要設置類似的值,詳細設置可以參考:http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CustomizingStores

我們繼續深入討論一下剛纔說到的密碼驗證。JMX提供了兩個文件進行密碼和訪問控制,一個是剛纔提到的jmxremote.password文件,用於設置角色密碼;另一個jmxremote.access 是訪問控制文件,定義了每個角色的讀寫的權限
密碼文件示例:
# The "monitorRole" role has password "QED".
# The "controlRole" role has password "R&D".
monitorRole QED
controlRole R&D

access文件示例:
# o The "monitorRole" role has readonly access.  
# o The "controlRole" role has readwrite access.
monitorRole   readonly
controlRole   readwrite


監測和管理相關的系統屬性
之前已經提到了一些屬性和含義,但是我們是在命令行下設置它們的,爲了不每次都這麼做,JMX提供了一個屬性文件,即JRE_HOME/lib/management/management.properties,文件裏面以註釋形式提供了所有屬性的含義和用法。

發佈了30 篇原創文章 · 獲贊 30 · 訪問量 74萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章