JRMP连接建立出现错误

14

我遇到以下异常信息:

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)

我阅读了一些论坛,但对于这个异常的根本原因仍然不清楚。这是由以下哪些原因之一引起的呢?

  1. 内存不足。
  2. RMI调用因服务器接收到大量请求而失败,导致其中一个请求等待并导致超时以处理此请求。
  3. JRE版本不兼容或任何与JRE版本相关的问题。
  4. 任何与网络有关的问题。
  5. 防火墙相关。

也许是的。通过实验尝试消除其中一些。 - Henry
以上选项中哪一个最能解释异常的原因?你有什么想法吗? - Sidd
很难在没有更多信息的情况下做出判断。您是否总是遇到此错误,还是有时可以正常工作?您能ping通远程机器吗? - Henry
3个回答

3
  1. 内存不足。

不是在客户端发生的,可能是在服务器端,例如如果无法为线程分配空间导致失败。

  1. RMI调用由于向服务器发送的请求数量增加而失败,其中一个请求等待并导致此请求处理超时。

不是。错误发生在连接建立阶段,远在服务器端方法实现被调用之前。

  1. JRE版本不兼容或与JRE版本相关的任何问题。

不是。

  1. 任何与网络相关的问题。

是的。

  1. 防火墙相关。

不是。这会导致连接超时,或在某些过时情况下导致连接拒绝,而不是读取超时。


这很可能与防火墙有关。并非所有的防火墙都是同样的工作方式。我知道阻止连接更有意义,但我见过很多情况下防火墙允许连接,然后阻止流量。 - davmac

2
我在客户端也遇到了同样的错误。服务器是可达的,我可以通过telnet打开端口。当我在客户端和服务器端使用Wireshark观察时,看到以下内容:
  • TCP连接已建立
    • SYN
    • SYN, ACK
    • ACK
  • 客户端发送:JRMI,版本2,流协议
  • 服务器回复: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的源代码,所以不能具体说明。

0

我遇到了这个错误,在这种情况下,当一个来自局域网外的SSH客户端持有SSH服务器并试图连接到服务器时,并且RMI涉及让客户端在服务器上执行RMI方法。 原因是服务器无法到达(缺少路由)。 看起来所有陈述的情况都与该原因有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接