当前位置: 首页 >> 观点
Jconsole 开启远程连接遇到的一些坑
来源:博客园     时间:2023-06-20 14:17:34

最近在学习 JVM,其中涉及到性能、内存等指标分析需要使用工具分享,Java 提供了几个可视化工具来监控和管理 Java 应用,比如 Jconsole、JVisual、JMC,他们以图形化的界面实时的监控程序各种性能指标以及内存、CPU 的使用情况。

Jconsole、JVisual、JMC 可视化工具,调用本地监控直接使用对应的命令行即可,但 Linux 无法使用可视化工具,Java 程序基本都部署到 Linux 服务器。需要本地远程调用服务器,本文记录一下远程调用的一些步骤和遇到的坑。


(资料图片仅供参考)

JMX

JXM(Java Management Extensions) 是 Java 提供的一套标准 API,用于管理和监控 Java 应用程序的各种性能指标和使用情况。这里主要使用远程访问的功能。

JMX 启动参数:

-Dcom.sun.management.jmxremote 远程开启开关-Dcom.sun.management.jmxremote.port=1808 jmx远程调用端口-Dcom.sun.management.jmxremote.authenticate=false 不开启验证-Dcom.sun.management.jmxremote.ssl=false 不为ssl连接-Djava.rmi.server.hostname=34.126.141.21 服务器所在ip或者域名配置远程连接

启动 Java 程序一般有两种方式:

一是打成 jar 包,使用 java -jar 运行程序。一种是打成 war 包,放在 tomcat 上运行。

无论是 jar 还是 war 包,都是将上面的配置参数用空格拼接起来,比如将上面的参数拼接:

Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=18088 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=34.126.141.21

添加到配置文件或者启动参数中。

Java 程序启动

jar 包程序启动一般为:

java -jar xxx.jar

添加参数后:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1808 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=34.126.141.21 -jar xxx.jar
tomcat 启动

在启动文件 catalina.sh 里面添加:

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1808 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=34.126.141.21"

添加上面的配置之后,重启 tomcat,再使用 Jconsole 远程连接

使用 jconsole 远程连接,一直连接不上

无法远程问题排查

先查看本地端口是否开启:

netstat -ntlp

端口已开启:

tcp6     0     0 :::1808          :::*              LISTEN      9087/java

再查看是否是防火墙问题,使用端口扫描查看,端口也开启了:

端口开启了,但是还是无法连接

找了很多网上的答案,大家都是抄来抄去的,都是上面的配置。最后才发现少了 rmi 配置。

解决方案

添加 rmi 端口:

-Dcom.sun.management.jmxremote.rmi.port=1808

JMX 和 RMI,是两种相关联的技术,JMX 使用 RMI 作为远程管理工具来管理和监控 Java 程序,RMI 为 JMX 提供了远程连接所需的远程调用和通信机制。

添加了上面的配置,就能远程监控 Java 服务了。

关闭 tomcat 报错

tomcat 启动添加了配置之后,关闭 tomcat 服务时,就报错了:

sun.management.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 18088; nested exception is: java.net.BindException: Address already in use (Bind failed)at sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:800)at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:468)at sun.management.Agent.startAgent(Agent.java:262)at sun.management.Agent.startAgent(Agent.java:452)Caused by: java.rmi.server.ExportException: Port already in use: 18088; nested exception is: java.net.BindException: Address already in use (Bind failed)at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254)at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:237)at sun.management.jmxremote.ConnectorBootstrap$PermanentExporter.exportObject(ConnectorBootstrap.java:199)at javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:146)at javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:122)at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:404)at sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:796)

简单就是端口被占用了,又去网上搜了很多答案,汇总了两个解决方法:

把 catalina.sh 添加的配置删掉使用 kill -9 的命令直接杀掉进程

这两种方案都是治标不治本的方法,每次都要做多一点的操作,就显得很繁琐。

问题分析

无论使用 startup.sh 启动 tomcat 还是使用 shutdown.sh 关闭 tomcat 都会执行 catalina.sh 脚本,所以关闭 tomcat 也会启动端口,而启动 tomcat 的时候已经开启了端口,关闭的时候再开启就报错了。

问题解决

只在启动tomcat 时添加 jmx 相关的配置,在 catalina.sh 添加判断条件 if [ "$1" = "start" ]

if [ "$1" = "start" ] ; then  JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=18088 -Dcom.sun.management.jmxremote.rmi.port=18088 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=34.126.141.211"fi
总结网上都是相互抄来抄去的,都是缺少 RMI 配置,完整配置如下JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1808 -Dcom.sun.management.jmxremote.rmi.port=1808 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=34.126.141.21"JMX 是一套标准 API,用于管理和监控 Java 应用程序。而 RMI 为 JMX 提供了远程连接。关闭的报错的解决方案也是互相抄来抄去,解决方案都是治标不治本。在配置上面添加 if 判断条件 添加判断条件 if [ "$1" = "start" ]。
标签:
Jconsole 开启远程连接遇到的一些坑 >最近在学习JVM,其中涉及到性能、内存等指标分析需要使用工具分享,Ja
马云非公开会议:接下来是淘宝而不是天猫的机会,阿里电商应该 “回归淘宝” 6月19日消息,5月下旬,阿里巴巴创始人马云召集淘天集团各业务负责人,
FBI加强调查特朗普在国会骚乱案中角色 曾因不愿表现党派倾向推迟立案 据《华盛顿邮报》19日报道,美国联邦调查局(FBI)已加强对特朗普在国会
房子两年没住,门被邻居用衣柜封住了…… 环球聚看点 综合:央广网、九派新闻、裁判文书网、喀左融媒、潇湘晨报等6月19日下
杜文祺同学,你的“梦中情校”回信了! 近日,广东深圳一位高三男生的一句话让网友纷纷点赞他说希望高考后能顺
【新视野】在空气净化器市场中选项目必须要五看 由于无经验,不知道比较品牌的进步前景,而失败的例子有诸多,对于如今
紧急救援!永泰一工人跌落6米深排水渠 紧急救援!永泰一工人跌落6米深排水渠,消防救援人员迅速展开救援!
全球通讯!倩女幽魂异人怎么样_倩女幽魂异人技能搭配 倩女幽魂异人怎么样?倩女幽魂是一部经典的古装爱情电影,其优美动人的
港大推全球首个筛选精准基因编辑工具平台 香港文汇报报导,依据每位病患的基因特性进行精准治疗,是医学发展的新
创新实验室致力于开发眼部护理解决方案 ShopEast创新实验室在两个楼层提供13,500平方英尺的工作空间,重点是协
618收官 电商大促告别GMV时代 “史上最卷”618落下帷幕。01首个不公布总成交额的618今年618,各路电
创业环保: 公司主营业务包含污水处理、再生水、供水等,没有您所提及的处理放射性废水的技术能力 创业环保(600874)06月20日在投资者关系平台上答复了投资者关心的问题。
韩国包包品牌价格(韩国包包品牌有哪些)_环球快报 想必现在有很多小伙伴对于韩国包包品牌有哪些方面的知识都比较想要了解
天宜上佳上半年净利润预增72.94%到93.7% 天宜上佳今日发布公告,预计2023年半年度实现营业收入为9 2亿元到11亿
淘丁分享:里程碑事件——三大运营商的第一次“元宇宙盛会” 中国移动、中国电信、中国联通三大运营商的董事长,以“元宇宙”的形式
全球速读:抖音电商:618大促平台整体销量同比增长66% 6月20日,抖音电商发布“抖音618好物节”活动消费数据。数据显示,5月3
2023年6月20日全国银行间同业拆借中心受权公布贷款市场报价利率(LPR)公告 当前报道 原标题:2023年6月20日全国银行间同业拆借中心受权公布贷款市场报价利
云南省首台!凯斯PUMA2404入驻西双版纳傣族自治州 6月16日,凯斯团队在西双版纳傣族自治州勐罕镇开展Puma2404拖拉机现场
今天打开个税APP,我直接人麻了!_世界热消息 点击上方“码农突围”,马上关注这里是码农充电第一站,回复“666”,
每日热议!学游戏设计去哪个学校? 想要学习游戏设计的同学,可以先自学或报名培训机班进行学习,这样子可
全球速讯:买金条要如何计算成本 其实作为金条来说,只要是正规渠道生产销售的,都可以购买。但其中有些
湖南“企业家进校园讲好创业就业故事”首场活动举行 6月19日,“企业家进校园讲好创业就业故事”首场活动在中南大学举行。
天天热资讯!高温津贴为何“年年喊,年年难” 高温津贴为何“年年喊,年年难”
华泰证券:下半年空调内销预期积极,看好稳健白电 证券时报网讯,华泰证券指出,长期看,对标日本我国空调人均保有量还有

广告

X 关闭

广告

X 关闭