报错信息:
22-Mar-2022 14:27:16.513 WARNING [RMI TCP Accept-0] sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,localport=45995] throws
java.io.IOException: The server sockets created using the LocalRMIServerSocketFactory only accept connections from clients running on the host where the RMI remote objects have been exported.
at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:114)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:405)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:377)
at java.lang.Thread.run(Thread.java:748)
问题背景:
Tomcat接入用于JMX监控的agent后(开启jmx端口),运行出现上面的报错信息,使用curl来采集metrics监控数据,采集不到。
问题分析:
上面的报错信息大致翻译下,意思是:服务器上使用LocalRMIServerSocketFactory创建的sockets,仅接受本服务器上运行的客户端的远程方法调用。
根据这个报错信息,在网上查询资料,可以通过下面的方法解决:
修改 jdk1.8.0_xxx\jre\lib\management\management.properties 文件中的配置,如下图所示。然后重启Tomcat进程即可。

不过,我采用了另外一个方法,就是在修改catalina.sh里面的jmx配置,将rmi的hostname地址修改为127.0.0.1
修改前:
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.xxx.xxx.xxx -Dcom.sun.management.jmxremote.port=9011 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
修改后:
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=9011 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
修改完成后,重启Tomcat进程,再检查catalina.out文件,已经没有上面的报错了,使用curl获取metrics监控数据成功。
1968

被折叠的 条评论
为什么被折叠?



