已使用的地址:JVM_Bind,但未使用带netstat的端口列出任何进程

时间:2018-07-19 18:04:13

标签: java sockets tcp netstat

我有一个使用ServerSocket API(Java 8)并绑定到本地端口12000的Java进程。该进程在Windows服务包装程序(exe4j)下运行。我有一个计划的任务,该任务在凌晨4点运行,可停止服务并在几秒钟后重新启动。该过程已在400个客户位置安装。

一切顺利,直到上周五。一些进程在凌晨4点无法正确重新启动。在2台服务器上,我能够连接并验证,重启失败,并同时显示“地址已在使用中:JVM_Bind”。系统似乎仍在使用端口12000。

我使用了所有工具(processexplorer,tcpview,netstat -ano,将其命名),我知道尝试找到该进程...没有成功。只有重新启动计算机才能解决此问题。但是一两天后问题又来了。

经过一番阅读,我发现我正在做sockect.accept()并具有无限超时,所以我将其更改为 socket.setSoTimeout(15000); socket.accept(); 代替。

我放置了新版本,但是问题仍然存在。

机器已更新Windows。我使用完全更新的Windows版本进行了测试,但无法复制。

我现在解决不了

任何想法 谢谢

2 个答案:

答案 0 :(得分:0)

我在这里遇到同样的问题。我有几个Java实例作为服务器运行,但是一旦这些Java应用程序中的任何一个被杀死并重新启动,它们就抱怨端口仍在使用中而无法这样做。以前从未发生过,我曾经不时地重新启动它们。

几天前,我的Windows服务器计算机也收到了一些新更新。

顺便说一句,我正在使用一种工具来监视端口和应用程序,并且这些端口未被任何程序使用,因此该应用程序实际上已被杀死。

答案 1 :(得分:0)

在进程关闭后,Windows更新影响了地址/端口的释放。

请参阅Address Bind exception in Tomcat以获取解决方案。