此问题是间歇性的,在每 30 秒运行一次并执行以下网络通信的进程上每隔几个小时就会发生一次:
- 远程机器上有一个服务器正在监听
- 客户端连接到这台机器并告诉服务器连接回它
- 服务器关闭套接字并重新连接到客户端
- 当客户端关闭套接字时,客户端立即开始在同一端口上侦听
JVM_Bind 错误发生在客户端尝试开始侦听同一端口时,即使它仅在原始套接字关闭后才尝试执行此操作。在套接字关闭和打开新套接字之间添加 100 毫秒的轻微延迟可防止 JVM_Bind 错误。
我可以使用哪些工具来调试此场景?连续运行 netstat 没有显示任何干扰端口的内容。
即使在同一个端口上启动一个新的套接字监听是一种坏主意,为什么这个错误会间歇性地发生?
编辑:一些附加信息。服务器从服务器上的临时端口连接回客户端。客户端的旧套接字将直接进入 CLOSED 并且应该能够重新打开。可能的原因不会是操作系统、JVM 或硬件上发生的事情吗?