我有一个使用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版本进行了测试,但无法复制。
我现在解决不了
任何想法 谢谢
答案 0 :(得分:0)
我在这里遇到同样的问题。我有几个Java实例作为服务器运行,但是一旦这些Java应用程序中的任何一个被杀死并重新启动,它们就抱怨端口仍在使用中而无法这样做。以前从未发生过,我曾经不时地重新启动它们。
几天前,我的Windows服务器计算机也收到了一些新更新。
顺便说一句,我正在使用一种工具来监视端口和应用程序,并且这些端口未被任何程序使用,因此该应用程序实际上已被杀死。
答案 1 :(得分:0)
在进程关闭后,Windows更新影响了地址/端口的释放。
请参阅Address Bind exception in Tomcat以获取解决方案。