java.rmi.ConnectException: Connection refused to host: 10.88.112.165; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:129)
at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2373)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:297)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:268)
at com.rf.emq.product.jmx.JmxProxy.initConn(JmxProxy.java:84)
at com.rf.emq.product.jmx.JmxProxy.getBrokerOperation(JmxProxy.java:102)
at com.rf.emq.product.jmx.JmxProxy.main(JmxProxy.java:318)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:147)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 10 more
java.rmi.ConnectException: Connection refused to host: 10.88.112.165; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:129)
at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2373)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:297)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:268)
at com.rf.emq.product.jmx.JmxProxy.initConn(JmxProxy.java:84)
at com.rf.emq.product.jmx.JmxProxy.getBrokerMbeanName(JmxProxy.java:274)
at com.rf.emq.product.jmx.JmxProxy.getBrokerOperation(JmxProxy.java:105)
at com.rf.emq.product.jmx.JmxProxy.main(JmxProxy.java:318)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:147)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 11 more
Exception in thread "main" java.lang.NullPointerException
at com.rf.emq.product.jmx.JmxProxy.getBrokerMbeanName(JmxProxy.java:278)
at com.rf.emq.product.jmx.JmxProxy.getBrokerOperation(JmxProxy.java:105)
at com.rf.emq.product.jmx.JmxProxy.main(JmxProxy.java:318)
**********************************************
【问题】
telnet 10.88.112.165 1100是ok的,但是远程通过客户端连接jmx时,访问不到,只有关闭防火墙,才可以访问到,
防火墙的配置规则,应该怎么配?==>
*********************
【分析】
问题状态:
1、通过netstat查看端口号,显示1100为LISTEN;监听是正常的;
2、iptables中已经将端口号1100置为开放的;
3、远程通过telnet <ip> <port>时,telnet是正常的;
4、(但是)通过jconsole <ip> <port>进行连接时,连接不上;
5、(如果)关闭firewall的话,第4步的方式是可以成功的;
***********************
【解答】
In addition to listening to the port you specified (1100) the JMX server also listens to a randomly chosen (ephemeral) port.
Check, e.g. with lsof -i|grep java if you are on linux/osx, which ports the java process listens to and make sure your firewall is open for the ephemeral port as well.
除了JMX server指定的监听端口号外,JMXserver还会监听一到两个随机端口号,
可以通过命令:lsof -i|grep java |grep <pid> 来查看当前java进程需要监听的随机端口号,
///////////begin////////
# netstat -tupln |grep 1101
tcp 0 0 0.0.0.0:1101 0.0.0.0:* LISTEN 13997/java
# lsof -i|grep 13997
java 13997 root 9u IPv4 132890 0t0 TCP *:37040 (LISTEN)
java 13997 root 70u IPv4 132891 0t0 TCP *:pt2-discover (LISTEN)
java 13997 root 72u IPv4 132892 0t0 TCP *:40085 (LISTEN)
java 13997 root 76u IPv4 146976 0t0 TCP hotnamea:61618->10.88.146.205:49165 (ESTABLISHED)
java 13997 root 84u IPv4 132904 0t0 TCP *:61618 (LISTEN)
java 13997 root 95u IPv4 132936 0t0 TCP *:8163 (LISTEN)
///////////end//////////
并且把这些端口号也放到iptable中,置为开放状态。
【小结】这也证明了尽管jmx server的主监听端口号【1100】已开放,但是远程连接时,还是访问不到,只有关闭firewall,才可以远程jmx连接上。
【建议】因为随机短口号是Java进程启动后,OS随机分配给jmxserver的,如果可以关闭firewall就选择关闭,否则,需要每次在server就绪后,监测到随机
端口号,并把它们配置到iptables中,置为开放状态。
【注意】每个Jmxserver还需要两个随机端口号。
*********************
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
分享到:
相关推荐
**Tomcat开启远程JMX连接方式详解** Java Management Extensions (JMX) 是Java...通过JMX,你可以使用各种工具(如JConsole、VisualVM、JMX Console插件等)进行远程监控,以便更好地管理和优化Tomcat服务器的性能。
它可能还涵盖了JMX连接器,这是JMX与外部管理系统通信的桥梁,如Java的JConsole或VisualVM工具。 此外,“src”目录可能包含了示例代码,帮助读者理解如何在实践中实现JMX功能。这些代码可能展示了如何定义MBeans、...
JConsole和VisualVM是Java自带的JMX客户端工具,可以方便地连接到运行中的JMX服务器进行监控。此外,还可以使用开源工具如JManage、JMXTERM或自定义的JMX客户端来访问和操作MBeans。 5. **安全配置** 远程JMX访问...
如果你的服务器不是运行在本地,你需要将`java.rmi.server.hostname`设置为服务器的公共IP地址或可解析的域名,以确保客户端可以从外部访问JMX服务。 ### 3. 客户端配置 客户端配置主要包括两部分:连接到JMX...
- `jconsole`:Java自带的GUI工具,可以连接到本地或远程的JMX服务器,查看和操作MBeans。 - `jvisualvm`:更强大的JDK工具,除了JMX功能外,还提供了内存分析、线程分析等功能。 - `jmxfetch`:开源工具,可以将...
对于远程监控,需在Tomcat等应用服务器的启动脚本中添加相应的JMX远程访问配置。JConsole的界面包含概述、内存、线程、类、VM和MBeans六个主要部分,它们分别显示堆内存使用、线程状态、已加载类、虚拟机信息以及...
也可以使用工具,如JConsole、VisualVM等,它们提供了图形化的界面来直接查看和操作远程服务器的JMX信息。 总结,JMX提供了一套完整的框架,使得开发者能够轻松地实现对远程服务器的监控,包括CPU、内存等关键资源...
此外,许多开源工具和应用服务器,如JConsole、VisualVM等,都利用JMX来提供可视化的监控界面。 总的来说,`jmx-1_2_1-ri.zip`和`jmx_remote-1_0_1_03-ri.zip`是实现和扩展JMX功能的关键组件,它们使得Java应用程序...
在Tomcat的`conf/server.xml`文件中,找到`<Server>`标签,在其中添加一个`Service`,并配置一个`Connector`来启用RMI(Remote Method Invocation),以便远程访问JMX。示例如下: ```xml <!-- Add this ...
此外,还有一些工具,如JConsole和VisualVM,它们是JDK自带的可视化管理工具,可以直接与JMX接口交互,便于监控和管理Java应用。 ### 6. 集成其他管理系统 JMX与SNMP(Simple Network Management Protocol)和Web...
而`jmxtools-1.2.1.jar`包含了JMX相关的工具和实用程序,如JMX连接器服务器、JConsole、VisualVM等,这些工具可以帮助开发者和管理员可视化和管理Java应用。例如,JConsole是JDK自带的图形化MBean浏览器和性能监视器...
在实际应用中,JMX客户端(如管理工具)可以通过JMX连接器(JMX Connector)与服务器端建立连接,访问和操作MBean,实现对Java应用程序的远程监控和管理。例如,JConsole和VisualVM提供了图形化的界面,用户可以直观...
5. **管理工具**:例如JConsole、VisualVM等,它们是JMX的标准客户端,可以帮助开发者可视化和交互式管理Java应用。 6. **安全性**:JMX支持安全管理,可以通过设置权限来控制谁可以访问和操作MBeans。 7. **使用...
1. **JConsole**: Java自带的GUI工具,可以直接连接到本地或远程的JMX服务器。 2. **VisualVM**: Oracle提供的多合一Java应用性能分析工具,支持JMX连接。 3. **JMXTerm**: 命令行工具,用于交互式地与JMX服务器...
这个技术允许开发者创建可管理的组件,并提供了一种统一的方式来远程访问和控制这些组件。在本文中,我们将深入探讨JMX的核心概念、功能以及如何在实际应用中使用它。 **JMX的核心概念** 1. **MBeans**: MBeans...
"工具"标签暗示了博主可能讨论了使用JMX的一些实用工具,比如JConsole、VisualVM或者自定义的JMX客户端,它们可以用来查看和操作MBeans,进行性能分析和故障排查。 在压缩包`JmxEgs`中,可能包含了一些示例代码或...
5. **客户端工具**:使用JConsole、VisualVM或其他支持JMX的工具,连接到MBeanServer,查看和操作MBean。 对于初学者,这个"最简单JMX例子"将展示如何创建一个简单的MBean,如何在Eclipse这样的集成开发环境中配置...
4. 连接和管理:通过JConsole或其他JMX客户端工具,如VisualVM或JMC(Java Mission Control),连接到运行中的Tomcat实例,找到并操作注册的MBeans,实现资源的动态管理。 JMX与Spring的结合使得开发者能够轻松地...
除了JConsole,还有许多其他的开源工具和库,如VisualVM、JTop、jmxterm等,可以用于更高级的JMX操作。 学习JMX,需要理解其基本概念,熟悉MBean的创建和注册,掌握如何使用JMX Connectors进行远程监控,以及如何...