使用本地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.入门参考

http://www.linuxidc.com/Linux/2015-02/113413.htm

http://www.linuxidc.com/Linux/2015-02/113418.htm

2.最权威的
http://www.linuxidc.com/Linux/2015-02/113419.htm

3.给我很大的启发,解决用户名和密码登录问题
http://www.linuxidc.com/Linux/2015-02/113415.htm

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

时间: 2024-08-24 07:21:08

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

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

问题背景 Tomcat经常崩溃crash,想看看JVM内存使用情况,就想到了用Jconsole监控,以前只是监控本地的JVM,这次要监控远程的,遇到了不少问题. 经过几个小时的努力,参考了众多网友的资料之后,才最终解决了这个问题. 比较坑爹的是,网上的资料,竟然没有一个是:完美无缺的,没有一篇文章提到了"jmxremote.access"这个文件的重要性. 第一阶段 找到了2种配置,是否需要输入密码. JAVA_OPTS="$JAVA_OPTS -Dcom.sun.manag

使用Java VisualVM监控远程JVM cpu jps

我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具.这个工具就在JAVA_HOME\bin\目录下的jvisualvm.exe, 双击这个文件就能看到一个比较直观的界面 从左边Applications树中可以知道,不光可以监控本地JVM运行情况, 还可以监控远程机器上的JVM运行情况.本地监控:只要打开某个JAVA程序就会自动的

本地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. 

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

一.本文的目的 Straggler是目前研究的热点,Spark中也存在Straggler的问题.GC问题是总所周知的导致Straggler的重要因素之一,为了了解GC导致的Straggler问题,首先需要学习GC问题以及如何监控Spark的GC.GC问题的讨论比较多了,推荐一篇系列文章用于学习:成为Java的GC专家. 二.本文所需工具 本文所需工具很简单,基本不用下载.监控GC的前提是: 1.已经在集群上安装了Spark并可以正常提交作业: 2.本地装有jdk1.6以上版本. 本文实际使用的工

jconsole监控远程weblogic和tomcat

jconsole可以对远程主机上的java进程的内存使用情况进行监控.本文将讲解如何使用jconsole监控远程主机上的weblogic和tomcat. 一.环境 1.本机环境:windows xp+jconsole(jdk1.6) 2.远程环境1:sunos(solaris.jdk1.6)+weblogic 3.远程环境2:redhat(jdk1.6)+tomcat 本文将介绍两种环境下的配置,两者配置基本上一样,其他的系统应该也差不多. 二.远程连接sunos(solaris)+weblog

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

来自:http://zhumeng8337797.blog.163.com/blog/static/100768914201242494649455/ 步骤如下: 1.编辑tomcat/bin/catalina.sh Bash代码 vi catalina.sh 在其中“ # ----- Execute The Requested Command -----------------------------------------” 之前插入新的一行(中间没有换行),内容如下: Vi catalin

使用Java visualVM监控远程JVM

1 监控远程tomcat 对于被监控的tomcat,需要修改tomcat的bin目录下的Catalina.sh配置文件,增加如下配置. JAVA_ OPTS="$JAVA_ OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=f

通过jconsole监控tomcat JVM 内存、线程、CPU

从Java 5开始 引入了 JConsole,来监控 Java 应用程序性能和跟踪 Java 中的代码.jconsole是JDK自带监控工具,只需要找到 JDK 安装路径,打开 bin 文件夹,双击 jconsole即可. 0.监控前的准备 将代码写入tomcat/bin/catalina.sh CATALINA_OPTS=-Djava.awt.headless=true JAVA_OPTS="-Djava.rmi.server.hostname=192.168.0.1 $JAVA_OPTS -

jconsole监控远程 spring boot程序

监控java 程序 增加启动参数 java  \ -Djava.rmi.server.hostname=192.168.1.97 \ -Dcom.sun.management.jmxremote \-Dcom.sun.management.jmxremote.port=1099 \-Dcom.sun.management.jmxremote.authenticate=false \-Dcom.sun.management.jmxremote.ssl=false \ -jar ImagesChec