13

我得到以下异常跟踪:

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. 防火墙相关。
4

3 回答 3

3
  1. 内存不足。

不在客户端。可能在服务器上,例如,如果它导致分配线程失败。

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

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

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

不。

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

是的。

  1. 防火墙相关。

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

于 2013-01-15T07:19:27.093 回答
1

我在客户端有同样的错误。服务器是可访问的,我可以通过 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 的源代码。

于 2016-04-21T09:15:29.433 回答
0

在这种情况下,当持有 SSH 服务器的局域网外部的 SSH 客户端尝试连接到服务器并且涉及 RMI 以让客户端在服务器上执行 RMI 方法时,我会收到此错误。原因是服务器的不可达性(缺少路由)。似乎所有陈述的案例都与这个原因有关。

于 2016-01-01T12:50:33.663 回答