http://blog.csdn.net/rachel_luo/article/details/8932932
翻譯自http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
用JMX管理你的JVMJMX是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=portNumportNum指代RMI連接的端口號。同時,遠程連接必須提供安全保證,所以默認使用基于SSL和TLS的密碼認證2.設置密碼(單用戶)將JRE_HOME/lib/management目錄的jmxremote.passWord.template文件改名為jmxremote.password,修改文件的訪問權限,只有管理員才能讀寫。然后給不同角色設置密碼,默認已經有兩個角色 monitorRole 和controlRole3.設置密碼(多用戶)將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 QEDcontrolRole R&D
access文件示例:# o The "monitorRole" role has readonly access. # o The "controlRole" role has readwrite access.monitorRole readonlycontrolRole readwrite
監測和管理相關的系統屬性之前已經提到了一些屬性和含義,但是我們是在命令行下設置它們的,為了不每次都這么做,JMX提供了一個屬性文件,即JRE_HOME/lib/management/management.properties,文件里面以注釋形式提供了所有屬性的含義和用法。
新聞熱點
疑難解答