【问题标题】:error with JRMP connection establishmentJRMP 连接建立错误
【发布时间】:2013-01-15 06:21:03
【问题描述】:

我得到以下异常跟踪:

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

【问题讨论】:

  • 也许是的。尝试通过实验消除其中的一些。
  • 以上选项中哪一个与异常原因最相关?对此有任何想法吗?
  • 很难说没有更多信息。你总是得到这个错误还是有时会起作用?你能ping通远程机器吗?

标签: java rmi


【解决方案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 的源代码。

【讨论】:

    【解决方案2】:
    1. 内存不足。

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

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

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

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

    没有。

    1. 任何网络相关问题。

    是的。

    1. 防火墙相关。

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

    【讨论】:

    • 当然可能与防火墙有关。并非所有防火墙都以相同的方式工作。我知道阻止连接更有意义,但我见过很多防火墙允许连接然后阻止流量的情况。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-24
      • 2021-04-26
      • 2015-01-14
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多