我们的一家供应商的司机上周突然失败,在一台已经工作了近一年的机器上。驱动程序输出的最后两条描述性消息现在相隔三分钟(而在它们是秒之前)。对代码进行反向工程,我发现在调用java.rmi.Naming.bind()期间发生了三分钟的延迟。
我的解决方法是什么?从bind()调用中获取更多信息是什么?它不会返回成功或失败指示,并且似乎没有抛出任何异常。我认为一致的3分钟延迟意味着在此过程中的某个时刻会出现一些超时,但为什么没有失败的迹象?
答案 0 :(得分:2)
这几乎肯定是DNS问题。检查DNS查找和反向查找时间。 Naming.bind()本身在两端都是微不足道的。
答案 1 :(得分:0)
回答我自己的问题:
java RMI似乎记录到java.util.logging。因此,配置java.util.logging以查看Java RMI正在执行的操作,以便您可以调试该问题。
(在我的例子中,我们使用log4j,所以我找到了一个库来将java.util.logging消息路由到log4j。)
启用日志记录后,我们发现RMI花了三分钟尝试连接到它认为是localhost的错误IP地址,这要归功于有人添加到我们的hosts文件中的错误条目。