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模板网!

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

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

相关文章

  • ubuntu开启远程连接服务

    ubuntu开启远程连接服务

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

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

    ElasticSearch开启远程连接

    开启远程访问    

    2024年02月11日
    浏览(9)
  • 配置开启Hive远程连接

    配置开启Hive远程连接

    要配置Hive远程连接,首先确保HiveServer2已启动并监听指定的端口 检查 HiveServer2是否正在运行 如果Hive 运行在与 Hadoop集成的环境中,HiveServer2可以与Hadoop中的用户验证机制集成,并且会使用已经验证的Hadoop用户凭据来进行身份验证和授权。 在IDEA的Database菜单栏如下操作,添加

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

    windows开启远程连接

    一. 背景 瞎搞 解决方式:没救了 随时访问电脑上文件 解决方式: a. 将文件通过百度工作空间、坚果云、或个人私有云实时备份,在其他端可以随时访问 b. 随时可以访问自己电脑。或者自己电脑是一台云电脑(云服务器) 对于其他电脑不满足自己需求时,能够不影响工作。

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

    mysql 开启远程连接(windows)

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

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

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

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

    CentOS7开启远程桌面连接

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

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

    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日
    浏览(13)
  • 如何开启kali的ssh远程连接

    如何开启kali的ssh远程连接

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

    2024年02月12日
    浏览(10)
  • 使用virsh远程连接主机遇到的问题

    by Gayathri R Nayak | Mar 16, 2021 Are you stuck with the error ‘The URI Failed to Connect to the Hypervisor’ and trying to find a solution for it?  You are at the right place. Different errors can occur when connecting to the server (for example, when running virsh). Here at Bobcares, we have seen several such hypervisor-related errors as part of ou

    2023年04月25日
    浏览(15)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包