Jconsole 开启远程连接遇到的一些坑

这篇具有很好参考价值的文章主要介绍了Jconsole 开启远程连接遇到的一些坑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在学习 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 远程连接,一直连接不上

Jconsole 开启远程连接遇到的一些坑

无法远程问题排查

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

netstat -ntlp

端口已开启:

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

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

Jconsole 开启远程连接遇到的一些坑

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

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

解决方案

添加 rmi 端口:

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

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

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

Jconsole 开启远程连接遇到的一些坑

关闭 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" ]文章来源地址https://www.toymoban.com/news/detail-493128.html

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 开启远程连接遇到的一些坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql——开启远程连接

    1、打开 mysql 数据库 use mysql; 2、查看 user 数据表当前已有的数据 select * from user G; 3、修改一条 root 数据,并刷新MySQL的系统权限相关表 update user set Host = \\\'%\\\' where Host = \\\'localhost\\\' and User=\\\'root\\\'; flush privileges;

    2024年02月07日
    浏览(36)
  • ElasticSearch开启远程连接

    开启远程访问    

    2024年02月11日
    浏览(36)
  • ubuntu开启远程连接服务

    操作系统:ubuntu20.04 远程连接软件:finalshell 首先更新 安装openssh-server,命令行输入: 中途键入 Y 完成安装。 启动 ssh 服务 然后检查 ssh 服务是否启动成功 安装 net-tools 安装成功后,输入 ifconfig ,查看本机ip 确保安装了vim后,打开找到了 /etc/ssh/ 目录下的sshd服务配置文件 s

    2024年02月11日
    浏览(31)
  • Redis开启远程连接

    Redis开启远程连接 1 开启远程连接 2 Jedis连接Redis 3 Jedis优化连接 3.1 Jedis连接池 4 lettuce redis默认是不支持远程连接,需要手动开启,在redis.conf文件中,找到下方法代码: 这里只允许127.0.0.1登录,注释掉 开启密码校验,去掉requirepass的注析 改完之后,保存退出,启动redis 首先创

    2024年02月16日
    浏览(32)
  • mysql 开启远程连接(windows)

    mysql版本:MySQL Server 5.7  打开 cmd 输入以下命令登录 mysql,接着输入密码,回车 接着输入命令 查看mysql 数据库当前 root 用户的相关信息 host 显示 localhost(默认),说明只支持本地访问,不允许远程访问 更改 root 用户的 host 默认配置    再查看信息,root 的 host 已经变了   刷

    2024年02月11日
    浏览(33)
  • MySQL开启远程连接的方法

    MySQL是一个流行的开源关系型数据库管理系统,它默认情况下只允许本地连接。如果您需要从远程计算机连接到MySQL服务器,则需要进行一些配置更改。以下是详细的步骤和相应的源代码,以帮助您开启MySQL的远程连接。 步骤 1:编辑MySQL配置文件 使用文本编辑器打开MySQL的配

    2024年02月03日
    浏览(33)
  • MySQL8.0 开启远程连接

    一、MySQL 开启远程连接需要先在服务器上登录到 MySQL mysql -u root -p 1 然后 Enter password: 二、修改 root 账户的 Host 1、打开 mysql 数据库 use mysql; 1 2、查看 user 数据表当前已有的数据 select * from user G; 1 3、修改一条 root 数据,并刷新MySQL的系统权限相关表 update user set Host = \\\'%\\\' where

    2024年02月08日
    浏览(35)
  • CentOS7开启远程桌面连接

    参考:https://www.bnxb.com/linuxserver/27459.html 特别说明:在运行yum -y groupinstall “X Window System” 时报错,不知道什么原因。 试了一些方法,没有解决,于是跳过,没想到不影响后面的操作。 在windows上运行mstsc,输入LINUX的IP地址 然后就进入登录界面,输入账号密码即可。

    2024年02月12日
    浏览(51)
  • 如何开启kali的ssh远程连接

    kali 是一款非常强大的渗透测试Linux操作系统,它是由BackTrack发展而来,整合了IWHAX、WHOPPIX和Auditor三种渗透测试专用Linux后,正式改名为Kali Linux。 我是在我的windows主机上开启Kali虚拟机,自己使用MacBook进行操作,有远程连接的需求,所以就想办法来开启 Kali的ssh服务来进行远

    2024年02月12日
    浏览(47)
  • Sql Server远程连接遇到的问题

    如图: 原因:SqlServer和VS的安装顺序 这里是SqlServer和VS的安装顺序问题,VS会默认安装SQL Server 2016LocalDB,将这个卸载,配置管理器刷新一下就可以了。 解决方法:卸载SQL Server 2016LocalDB 卸载刷新后是这样的 PS:还有一点需要注意的是数据库的允许远程连接和MSSQLSERVER协议中的

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包