问题背景
  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
 
   "用户名及密码(参考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

使用本地JConsole监控远程JVM (转)的更多相关文章

  1. 使用本地JConsole监控远程JVM(最权威的总结)

    问题背景   Tomcat经常崩溃crash,想看看JVM内存使用情况,就想到了用Jconsole监控,以前只是监控本地的JVM,这次要监控远程的,遇到了不少问题.   经过几个小时的努力,参考了众多 ...

  2. 使用本地JConsole监控远程JVM

    第一阶段 找到了2种配置,是否需要输入密码. 在 catalina.bat 文件新增如下脚本 第一种配置: rem HaoYang Set JAVA_OPTSset JAVA_OPTS=-Xms512 ...

  3. 使用jconsole监控远程JVM

    使用jconsole监控远程JVM 学习了:https://www.linuxidc.com/Linux/2015-02/113420.htm https://www.cnblogs.com/thin ...

  4. 使用Java VisualVM监控远程JVM

    我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...

  5. Java VisualVM监控远程JVM

    我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...

  6. 本地win下JConsole监控远程linux下的JVM

    环境:服务器端: Linux + jdk1.7.0_75 + tomcat 7本地: Win + jdk1.7.0_55 一.修改/etc/hosts文件 hostname -i 如果显示127.0. ...

  7. Spark的Straggler深入学习(1):如何在本地图形监控远程Spark的GC情况——使用java自带的jvisualvm

    一.本文的目的       Straggler是目前研究的热点,Spark中也存在Straggler的问题.GC问题是总所周知的导致Straggler的重要因素之一,为了了解GC导致的Straggle ...

  8. jconsole监控远程linux tomcat运行情况的配置 (转)

    来自:http://zhumeng8337797.blog.163.com/blog/static/100768914201242494649455/ 步骤如下: 1.编辑tomcat/bin/cat ...

  9. JConsole监控远程Tomcat服务器

    为了解决内存溢出的问题,会用到一些监视内存的工具,jconsole这个工具在jdk1.7自带了.这个工具可以查看系统的堆,非堆,线程,等等的一些整体的情况,从而可以判断出系统的一个大概的性能情况. c ...

随机推荐

  1. Tomcat常见的内存溢出,以及解决方法

    一.常见的三种内存溢出错误: 1.java.lang.OutOfMemoryError:java heap space    ====JVM Heap(堆)溢出 JVM再启动的时候回自动设置JVM H ...

  2. App.xaml.cs

    using System.Windows; namespace HelloWorld { /// <summary> /// Interaction logic for App.xaml ...

  3. 制作web字体:CSS3 @font-face

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,另外@font- ...

  4. HDU 4048 Zhuge Liang's Stone Sentinel Maze

    Zhuge Liang's Stone Sentinel Maze Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/327 ...

  5. [问题2014A11] 复旦高等代数 I(14级)每周一题(第十三教学周)

    [问题2014A11]  设 \(n\) 阶方阵 \(A,B\) 满足: \((A+B)^2=A+B\), \(\mathrm{r}(A+B)=\mathrm{r}(A)+\mathrm{r}(B)\ ...

  6. SQL MD5加密

    ) 加密结果:

  7. PDO数据库抽象层

    PDO的优势在于兼容性,但速度不如mysql和mysqli new PDO($dsn,$username,$passwd[,$options]) $options可以设置数据库连接属性,如: $opt ...

  8. sql语句中left join、inner join中的on与where的区别

    table a(id, type): id     type ---------------------------------- 1      1 2      1 3      2 table b ...

  9. jQuery核心之jQuery Object及其相关的常用方法

    1.jQuery Object 和 原生的DOM对象之间有许多方法是不一样的,用jQuery的方法大部分情况下返回的是jQuery Object,但是jQuery也提供了一些方法可以很轻松的获取原生的 ...

  10. [http session]

    原文链接:http://lavasoft.blog.51cto.com/62575/275589/ 1.Session创建的时间是: 一个常见的误解是以为session在有客户端访问时就被创建,然而事 ...