本地win下JConsole監控遠程linux下的JVM


環境:
服務器端: Linux + jdk1.7.0_75 + tomcat 7
本地: Win + jdk1.7.0_55

一、修改/etc/hosts文件

hostname -i 如果顯示127.0.0.1時,修改/etc/hosts 將127.0.0.1替換成linux服務器的真實ip

二、修改 catalina.sh文件

vim  /usr/local/tomcat7**/bin/catalina.sh   #進入tomcat的bin目錄下

在# OS specific support.  $var _must_ be set to either true or false.下增加

#JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

三、修改jmxremote.access和jmxremote.password.template

cd /usr/java/jdk1.7.0_75/jre/lib/management

vim jmxremote.access

monitotRole 只讀權限  隨意添加一個用戶xxxx    controlRole 讀寫權限,添加用戶admin

#monitorRole   readonly
lisssss   readonly
#controlRole   readwrite \
admin   readwrite \
              create javax.management.monitor.*,javax.management.timer.* \
              unregister

mv jmxremote.password.template   jmxremote.password #重命名

chmod +w  jmxremote.password  #增加寫權限

vim jmxremote.password   為只讀用戶和讀寫用戶設置密碼

# monitorRole  QED
lisssss 1234xx
# controlRole   R&D
admin 1234xx

四、打開本地jconsole,連接遠程linux中jvm

     1.打開jconsole

         cmd----jconsole 或者雙擊C:\Program Files\Java\jdk1.7.0_55\bin下的jconsole.exe

     2.連接遠程linux中jvm

       選擇遠程進程:遠程服務器的ip:端口號  用戶名、口令輸入jmxremote.password中的用戶名或密碼---點擊連接

 jconsole監控成功如下圖:

問題:監控后,關閉tomcat,報錯:提示9008端口號被占用,原因在關閉tomcat時,也執行了Catalish中的jmxremote的端口號

[root@localhost bin]# ./shutdown.sh
/usr/local/tomcat7-java_shop/bin/catalina.sh: line 101: -agentpath:/opt/jprofiler7/bin/linux-x64/libjprofilerti.so=port=8080: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat7**
Using CATALINA_HOME:   /usr/local/tomcat7**
Using CATALINA_TMPDIR: /usr/local/tomcat7**/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_75
Using CLASSPATH:       /usr/local/tomcat7-java_shop/bin/bootstrap.jar:/usr/local/tomcat7**/bin/tomcat-juli.jar
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 9008; nested exception is: 
    java.net.BindException: Address already in use

解決:在catalish.sh文件中,判斷是否為啟動命令,如果是start,就設置變量,否則,就不設置

JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m"
if [ "$1" = "start" ];then
     echo "set console";
     JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false";
else
  echo "no startup";
fi;

聲明,本隨筆綜合了各大神的文章,就不一 一贅述了,在此表示感謝!

 


免責聲明!

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



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