java.rmi.Naming.bind()中的延迟

java.rmi.Naming.bind()中的延迟,java,rmi,Java,Rmi,上周,我们的一家供应商的一名司机在一台工作了将近一年的机器上突然出现故障。驱动程序输出的最后两条描述性消息现在相隔三分钟(而之前是几秒钟)。对代码进行反向工程,我发现在调用java.rmi.Naming.bind()时会发生三分钟的延迟 我对此进行故障排除并从bind()调用中获取更多信息的出发点是什么?它不会返回成功或失败指示,也不会抛出任何异常。我假设持续3分钟的延迟意味着在过程中的某个时间点出现了超时,但为什么没有故障迹象?这几乎肯定是DNS问题。检查DNS查找和反向查找时间。命名.bin

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


我对此进行故障排除并从bind()调用中获取更多信息的出发点是什么?它不会返回成功或失败指示,也不会抛出任何异常。我假设持续3分钟的延迟意味着在过程中的某个时间点出现了超时,但为什么没有故障迹象?

这几乎肯定是DNS问题。检查DNS查找和反向查找时间。命名.bind()本身在两端都很简单。

回答我自己的问题:

java RMI似乎要登录到java.util.logging。因此,配置java.util.logging以查看java RMI正在做什么,这样您就可以调试问题了

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


启用日志记录后,我们发现RMI花了三分钟试图连接到一个错误的IP地址,该地址被认为是本地主机,这要感谢有人在我们的主机文件中添加了一个错误的条目。

网络跟踪将验证这一点,并排除任何其他LDAP(我假设)问题。WireShark和tcpdump是您在这里的朋友-您可以过滤掉DNS和LDAP流量,并查看时间戳。@AngerClown LDAP与此无关。这是一个RMI注册API.DNS和反向DNS查找看起来非常快,尽管反向查找结果对于我们网络上的主机来说非常不稳定——但我认为这是因为这里的管理员不提供反向DNS查找。有没有办法从对Naming.bind()的调用中获取日志或调试数据?此操作与DNS绑定不同,是吗?@skipophy否它与DNS绑定不同。你的网络管理员需要教育。Java通过大量的数据来反向DNS查找。没有理由不让它们正常工作。在这个驱动程序工作的另一台机器上,对机器自己的IP地址的反向DNS查找失败。你能给我一个反向DNS查找的例子,它应该可以在一台工作的机器上工作,但在一台故障的机器上失败吗?很抱歉我这么糊涂,但我需要一些东西,我可以带回给这台机器上的管理员。