1

上周,我们的一个供应商的驱动程序突然在一台已经工作了近一年的机器上开始出现故障。驱动程序输出的最后两条描述性消息现在相隔三分钟(而之前是几秒钟)。对代码进行逆向工程,我发现在调用 java.rmi.Naming.bind() 期间会发生三分钟的延迟。

我解决此问题并从调用 bind() 中获取更多信息的出发点是什么?它不返回成功或失败指示,并且似乎没有抛出任何异常。我会假设一致的 3 分钟延迟意味着在此过程中的某个时间点遇到了一些超时,但是为什么没有失败的迹象呢?

4

2 回答 2

2

这几乎可以肯定是 DNS 问题。检查 DNS 查找和反向查找时间。Naming.bind() 本身在两端都是微不足道的。

于 2012-08-20T23:37:48.943 回答
0

回答我自己的问题:

java RMI 似乎记录到 java.util.logging。因此,配置 java.util.logging 以查看 Java RMI 在做什么,以便您可以调试问题。

(在我的例子中,我们使用 log4j,所以我找到了一个库来将 java.util.logging 消息路由到 log4j。)

启用日志记录后,我们发现 RMI 花了三分钟时间尝试连接到它认为是 localhost 的错误 IP 地址,这要归功于有人在我们的 hosts 文件中添加了错误的条目。

于 2012-08-31T18:37:48.060 回答