【问题标题】:RMI responding very slowRMI 响应非常慢
【发布时间】:2012-07-05 11:11:29
【问题描述】:

我正在使用 Java 远程方法调用 (RMI) 测试 Web 应用程序。当我通过加密狗、宽带连接到互联网时; RMI 需要很长时间才能响应请求。完成方法调用大约需要 10 秒。一旦我进行方法调用,我还可以看到互联网连接中的数据传输率上升。所以肯定它似乎是通过外部网络在两个内部进程之间建立 RMI 连接。

虽然与互联网断开连接,但它的响应速度会有所不同,例如几毫秒。我的 /etc/hosts 文件有 127.0.0.1 localhost 的条目。我总是在方法调用 url 中使用 127.0.0.1 来命名.lookup。但是当我连接到互联网时,无法弄清楚如何让机器快速响应 RMI 调用。有什么建议么?

【问题讨论】:

  • 您可以检查您的 RMI 服务器绑定到哪个接口。 Wireshark 还可以帮助弄清楚发生了什么。
  • 您可以更改 rmiregistry 以在 127.0.0.1 上收听吗?只是为了隔离问题。
  • 我在LocateRegistry 中找不到这样做的方法,你能建议我这样做吗?

标签: java macos rmi tomcat7


【解决方案1】:

您的问题不是您用于对 RMI 注册表的查找调用的地址,而是 URL 中的地址,它是查找调用的结果。这默认为系统上第一个接口的 IP 地址,所以我猜当您连接到 Internet 时,它就是您的外部连接。

我认为正在发生的事情是,您在 127.0.0.1 上调用 RMI 注册表,这会返回您的 Internet 地址和所需服务的位置,因此您的 RMI 调用会通过加密狗接口路由出去。

您需要设置 the java.rmi.server.hostname property 来告诉 RMI 注册表在其 RMI URL 中返回哪个主机名或 IP 地址。

所以你需要这样的东西:

String ipAddress = "10.1.2.3"; //Local IP address 
System.setProperty("java.rmi.server.hostname",ipAddress);

String hostname = "myserver"; //hostname that resolves for a local address
System.setProperty("java.rmi.server.hostname",hostname);

【讨论】:

  • 非常好,但它不会“告诉 RMI 注册表”任何东西,它会告诉 JVM 从哪个远程对象导出哪个 IP 地址/主机名放在存根中。
猜你喜欢
  • 2014-08-07
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2015-10-30
相关资源
最近更新 更多