我正在跟踪异常跟踪:
java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.net.SocketTimeoutException: Read timed out
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:293)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:190)
我在这方面阅读了一些论坛,但没有弄清楚这个例外的根本原因。这是由于以下原因之一吗?
答案 0 :(得分:3)
- 内存不足。
醇>
不在客户端。可能在服务器上,如果它导致例如分配线程失败。
- 由于对服务器的请求数量增加导致RMI调用失败,导致其中一个请求等待并导致此请求处理超时。
醇>
没有。在连接建立阶段,错误发生在服务器端方法实现被调用之前很久。
- 不兼容的jre版本或与JRE版本相关的任何内容。
醇>
没有
- 任何与网络相关的问题。
醇>
是
- 防火墙相关。
醇>
没有。这会导致连接超时,或者在某些过时的情况下会导致连接拒绝,而不是读取超时。
答案 1 :(得分:0)
在这种情况下,当来自LAN外部的持有SSH服务器的SSH客户端尝试连接到服务器并且涉及RMI让客户端在服务器上执行RMI方法时,我收到此错误。 原因是服务器的不可达性(缺少路由)。 似乎所有陈述的案例都与这个原因有关。
答案 2 :(得分:0)
我在客户端遇到同样的错误。服务器可以访问,我可以通过telnet打开端口。 当我在客户端和服务器端使用Wireshark观看时,我看到以下内容:
建立TCP连接
SYN
SYN, ACK
ACK
客户发送:JRMI, Version 2, Stream Protocol
JRMI, ProtocolAck
- 但此程序包从未到达客户端就我而言,它是从MagicDraw客户端到许可证服务器的连接。对于其他位置的其他收藏,有助于使用代理:
http.proxyHost=xxxx -Dhttp.proxyPort=8080
和客户端通过HTTP进行通信。所以也许这可以帮助你省略这个问题。
https://docs.oracle.com/javase/7/docs/platform/rmi/spec/rmi-arch6.html
我不能具体,因为我无法访问Magic Draw的源代码。
答案 3 :(得分:-2)
在tomcat的启动文件中设置CATALINA_OPTS
如下所示
CATALINA_OPTS=-Djava.awt.headless=true -Xmx128M -server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost
此处端口号不是服务器运行端口。给出不同的端口号,如9091,1099等,主机名如localhost或198.168.128.72
以
运行jconsolejconsole 198.168.128.72:9091
此处端口号不是服务器端口号。它是CATALINA_OPTS
中给出的JMX端口。