`

远程访问JMX遇到连接不上的问题(JConsole和VisualVM工具类似)

阅读更多

远程访问JMX遇到连接不上的问题(JConsole和VisualVM工具类似)

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连接方式

    **Tomcat开启远程JMX连接方式详解** Java Management Extensions (JMX) 是Java...通过JMX,你可以使用各种工具(如JConsole、VisualVM、JMX Console插件等)进行远程监控,以便更好地管理和优化Tomcat服务器的性能。

    JMX入门的好资料啊

    它可能还涵盖了JMX连接器,这是JMX与外部管理系统通信的桥梁,如Java的JConsole或VisualVM工具。 此外,“src”目录可能包含了示例代码,帮助读者理解如何在实践中实现JMX功能。这些代码可能展示了如何定义MBeans、...

    JMX-how-to-use.rar_jmx_服务器_远程监控 文件

    JConsole和VisualVM是Java自带的JMX客户端工具,可以方便地连接到运行中的JMX服务器进行监控。此外,还可以使用开源工具如JManage、JMXTERM或自定义的JMX客户端来访问和操作MBeans。 5. **安全配置** 远程JMX访问...

    JMX配置与使用

    如果你的服务器不是运行在本地,你需要将`java.rmi.server.hostname`设置为服务器的公共IP地址或可解析的域名,以确保客户端可以从外部访问JMX服务。 ### 3. 客户端配置 客户端配置主要包括两部分:连接到JMX...

    jmx_examples.rar_Java 8_jmx_jmx examples_jmx main_jmx_examples

    - `jconsole`:Java自带的GUI工具,可以连接到本地或远程的JMX服务器,查看和操作MBeans。 - `jvisualvm`:更强大的JDK工具,除了JMX功能外,还提供了内存分析、线程分析等功能。 - `jmxfetch`:开源工具,可以将...

    JVM调优工具分享

    对于远程监控,需在Tomcat等应用服务器的启动脚本中添加相应的JMX远程访问配置。JConsole的界面包含概述、内存、线程、类、VM和MBeans六个主要部分,它们分别显示堆内存使用、线程状态、已加载类、虚拟机信息以及...

    JMX 远程服务器信息监控

    也可以使用工具,如JConsole、VisualVM等,它们提供了图形化的界面来直接查看和操作远程服务器的JMX信息。 总结,JMX提供了一套完整的框架,使得开发者能够轻松地实现对远程服务器的监控,包括CPU、内存等关键资源...

    jmx所需的jar

    此外,许多开源工具和应用服务器,如JConsole、VisualVM等,都利用JMX来提供可视化的监控界面。 总的来说,`jmx-1_2_1-ri.zip`和`jmx_remote-1_0_1_03-ri.zip`是实现和扩展JMX功能的关键组件,它们使得Java应用程序...

    jmx 监控 tomcat

    在Tomcat的`conf/server.xml`文件中,找到`&lt;Server&gt;`标签,在其中添加一个`Service`,并配置一个`Connector`来启用RMI(Remote Method Invocation),以便远程访问JMX。示例如下: ```xml &lt;!-- Add this ...

    JMX.rar_jmx

    此外,还有一些工具,如JConsole和VisualVM,它们是JDK自带的可视化管理工具,可以直接与JMX接口交互,便于监控和管理Java应用。 ### 6. 集成其他管理系统 JMX与SNMP(Simple Network Management Protocol)和Web...

    jms-jmxri-jmxtools的jar文件

    而`jmxtools-1.2.1.jar`包含了JMX相关的工具和实用程序,如JMX连接器服务器、JConsole、VisualVM等,这些工具可以帮助开发者和管理员可视化和管理Java应用。例如,JConsole是JDK自带的图形化MBean浏览器和性能监视器...

    面试官问我 JMX 了解不,我说:什么? - 知乎1

    在实际应用中,JMX客户端(如管理工具)可以通过JMX连接器(JMX Connector)与服务器端建立连接,访问和操作MBean,实现对Java应用程序的远程监控和管理。例如,JConsole和VisualVM提供了图形化的界面,用户可以直观...

    JMX、MXBean学习

    5. **管理工具**:例如JConsole、VisualVM等,它们是JMX的标准客户端,可以帮助开发者可视化和交互式管理Java应用。 6. **安全性**:JMX支持安全管理,可以通过设置权限来控制谁可以访问和操作MBeans。 7. **使用...

    jmx-jvm配置

    1. **JConsole**: Java自带的GUI工具,可以直接连接到本地或远程的JMX服务器。 2. **VisualVM**: Oracle提供的多合一Java应用性能分析工具,支持JMX连接。 3. **JMXTerm**: 命令行工具,用于交互式地与JMX服务器...

    jmx学习资料

    这个技术允许开发者创建可管理的组件,并提供了一种统一的方式来远程访问和控制这些组件。在本文中,我们将深入探讨JMX的核心概念、功能以及如何在实际应用中使用它。 **JMX的核心概念** 1. **MBeans**: MBeans...

    jmx例子一则

    "工具"标签暗示了博主可能讨论了使用JMX的一些实用工具,比如JConsole、VisualVM或者自定义的JMX客户端,它们可以用来查看和操作MBeans,进行性能分析和故障排查。 在压缩包`JmxEgs`中,可能包含了一些示例代码或...

    最简单JMX例子

    5. **客户端工具**:使用JConsole、VisualVM或其他支持JMX的工具,连接到MBeanServer,查看和操作MBean。 对于初学者,这个"最简单JMX例子"将展示如何创建一个简单的MBean,如何在Eclipse这样的集成开发环境中配置...

    基于Spring+JMX+Tomcat实现资源动态管理

    4. 连接和管理:通过JConsole或其他JMX客户端工具,如VisualVM或JMC(Java Mission Control),连接到运行中的Tomcat实例,找到并操作注册的MBeans,实现资源的动态管理。 JMX与Spring的结合使得开发者能够轻松地...

    JAVA JMX 学习资料

    除了JConsole,还有许多其他的开源工具和库,如VisualVM、JTop、jmxterm等,可以用于更高级的JMX操作。 学习JMX,需要理解其基本概念,熟悉MBean的创建和注册,掌握如何使用JMX Connectors进行远程监控,以及如何...

Global site tag (gtag.js) - Google Analytics