使用本地JConsole監控遠程JVM(最權威的總結)


問題背景
  Tomcat經常崩潰crash,想看看JVM內存使用情況,就想到了用Jconsole監控,以前只是監控本地的JVM,這次要監控遠程的,遇到了不少問題。
  經過幾個小時的努力,參考了眾多網友的資料之后,才最終解決了這個問題。
  比較坑爹的是,網上的資料,竟然沒有一個是:完美無缺的,沒有一篇文章提到了“jmxremote.access”這個文件的重要性。
 
第一階段
  找到了2種配置,是否需要輸入密碼。
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=60001"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
   
   authenticate為false,jconsole連接遠程jvm時,就不需要輸入用戶名和密碼。
   否則,要配置密碼文件和密碼。
   可以指定密碼文件的位置
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.pwd.file=/root/soft/jdk7/jre/lib/management/jmxremote.password"
   
   我把這些配置放在了catalish.sh中。
   
第二階段
   上面的配置遇到了一個問題,如果是第一次啟動正常,但是當shutdown時,提示端口號被占用了。
   問題原因是,在關閉Tomcat時,也執行了Catalish中的jmxremote的端口號。
   
    解決辦法:在catalish.sh文件中,判斷是否為啟動命令,如果是start,就設置變量,否則,就不設置。
   相關腳本:
   JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m"
101  if [ "$1" = "start" ];then
102      echo "set console";
103 #   JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m"
104     JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=60001 -Djava.rmi.server.hostname=42.96.84.84";
105     JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false";
106     JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false";
107 #   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.pwd.file=/root/soft/jdk7/jre/lib/management/jmxremote.password"
108 else
109   echo "no startup";
110 fi;
111
 
第三階段
   上面的設置之后,可能還連接不上,需要配置“java.rmi.server.hostname”為機器的ip,比如我的是“42.96.84.84”。
   
   然后,重啟Tomcat,在本地Jconsole連接遠程JVM,只輸入“42.96.84.84:60001”。
 
   
第四階段
   登錄使用密碼,搞了幾個小時,尼瑪。
   
   注意問題
   1.-Dcom.sun.management.jmxremote.authenticate=true
   2.-Dcom.sun.management.jmxremote.pwd.file 指定正確的密碼文件
   3.用戶名及密碼(參考jmxremote.password文件) monitorRole只能讀,controlRole能讀寫 
     配置中的安全原因出錯,由於密碼是以明文的方式保存在:jmxremote.password中,所以對此文件只能有所有者都讀取,其他人都不能讀取。
 權限需要注意,600,所有者有rw權限。
   4.用戶和權限其實是存在jmxremote.access中。
   千萬要注意啊,網上的絕大部分資料,都沒有提到這個文件的真正作用。
   我是在嘗試了若干小時之后,才發現這個文件的作用,竟然是如此的大。
   有點類似於SVN配置,用戶名-權限,用戶名-密碼,2個配置文件。
   fansunion   readonly
   admin   readwrite \
                 create javax.management.monitor.*,javax.management.timer.* \
                 unregister
 
jmxremote.password內容
fansunion  12345
admin  12345
 
http://www.linuxidc.com/Linux/2015-02/113415.htm”這篇文章的最后,
   "用戶名及密碼(參考jmxremote.password文件) monitorRole只能讀,controlRole能讀寫",給我很大的啟發。
   為什么monitorRole和controlRole,這2個角色的權限還不一樣呢,默認注釋的password文件中,沒有看出有啥區別呀。
   於是,我才去jmxremote.access文件看了看,最終找到了問題的症結。
   
   至此,不使用密碼和使用用戶名及密碼,“admin”-“12345”成功登錄42.96.84.84上的Tomcat使用的JVM。
   
   注意:本文中的ip、用戶名、密碼,僅供參考,你懂的。
   
參考資料
 
1.入門參考
 
 
3.給我很大的啟發,解決用戶名和密碼登錄問題
http://www.linuxidc.com/Linux/2015-02/113415.htm

本文永久更新鏈接地址http://www.linuxidc.com/Linux/2015-02/113420.htm 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM