如何用JMX远程桌面连接运行命令本地JVM上运行的Java程序

1486人阅读
经验(31)
& 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&
109 & echo &no startup&;
& &上面的设置之后,可能还连接不上,需要配置“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.入门参考
2.最权威的
3.给我很大的启发,解决用户名和密码登录问题
本文永久更新链接地址:&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:451597次
积分:6910
积分:6910
排名:第3218名
原创:199篇
转载:104篇
译文:48篇
评论:295条
文章:10篇
阅读:9786
阅读:11986
阅读:4187
(2)(1)(1)(2)(8)(3)(8)(1)(12)(17)(20)(26)(22)(20)(26)(26)(57)(96)(2)(1)问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
rttttttttttttt
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
java不是已经内置了监控管理工具了么?还是说你需要其它什么东西
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App使用JConsole远程监控JVM - JAVA技术 - ITeye博客
博客分类:
JConsole是从Java 5中开始引入的一个用于对JVM性能和资源消耗进行监控的图形化工具。JConsole可以连接本地的Java程序,也可以连接远程的Java程序。由于是GUI的方式使用,所以就不细说那些基本的使用方法了,这里只是记录一下试用过程中遇到的几个小问题及其解决方案。这里使用的是SPECjbb2005这个benchmark中的Java来做了一下试验,因为它也是一个Java Application的benchmark,可以在run.sh脚本中对“JAVA_OPTIONS=”这一行进行相应的定制。
1. 要实现让JConsole可以远程连接到某个Java程序,则需要在Java程序启动的JAVA_OPTION中添加选项“com.sun.management.jmxremote.port=8888”来指定远程管理的端口。
2. 启动Java程序时,遇到如下报错:
[root@localhost SPECjbb2005]# ./run.sh
Thu Jul 25 23:00:50 CST 2013
./jbb.jar:./check.jar:
java full version "1.6.0_24-b24"
Error: Password file not found: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/management/jmxremote.password
Thu Jul 25 23:00:50 CST 2013
这是由于开启Java JMX 远程管理时,默认会有用户名密码的验证,所以需要相应的密码文件。
[root@localhost SPECjbb2005]# ls /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/management/
jmxremote.access
jmxremote.password.template
management.properties
snmp.acl.template
需要先在jmxremote.access中定义用户权限,然后在jmxremote.password文件中定义用户名和对应的密码,jmxremote.password文件可以复制jmxremote.password.template模板文件来进行修改。当然,在内网中仅仅用于调试,我们一般可以不设置密码验证和SSL连接方式,Java选项如下:-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
3. 在进行了端口和认证信息的配置后,发现在JConsole中通过IP远程连接JVM依然不成功。错误信息为:Connection Failed: Retry? The connection to 192.168.52.11:8888 did not succeed. Would you like to try again?在启动Java时,需要设置RMI远程调用的主机名,一般设置为主机的IP地址即可,如下:-Djava.rmi.server.hostname=192.168.52.11(当然,也有可能是由于前面第2点中提到的SSL的设置问题,依然需要检查一下)
关于JConsole,还是得执行看看Oracle的这篇Java SE 6 中的JConsole的描述:
/javase/6/docs/technotes/guides/management/jconsole.html
(特别是上面文档中对监控数据、图形代表的意义是需要认真理解的)
浏览: 183508 次
来自: 上海
总结很到位 ,没有两三年经验是总结不出来的。。。
种种迹象显示,该文章要上首页
16跟27重复了
上述27种都不存在。除了上级不写代码,任何一种都无法忍受。虽然 ...
好像这种情况都有吧,我们的领导现在基本都不写代码了~~~~~}

我要回帖

更多关于 本地连接运行不正常 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信