我有一个使用ServerSocket API (Java 8)并绑定在本地端口12000的Java进程。该进程在Windows服务Wrapper (exe4j)下运行。我有一个定时任务,在每天早上4点停止服务,几秒钟后重新启动。该进程已安装在超过400个客户位置。
一切都进行得很顺利,直到上周五。一些进程在早上4点无法正确重新启动。在两台服务器上,我可以连接和验证,重新启动失败,并显示“Address already in use: JVM_Bind”。似乎端口12000仍由系统占用。
我使用我所知道的所有工具(processexplorer、tcpview、netstat-an等)尝试查找进程,但都没有成功。只有机器重启才能解决问题。但问题在一两个晚上又出现了。
阅读一些资料后,我发现我正在使用无限超时的
我已经没有解决方案了。你有任何想法吗?
谢谢。
一切都进行得很顺利,直到上周五。一些进程在早上4点无法正确重新启动。在两台服务器上,我可以连接和验证,重新启动失败,并显示“Address already in use: JVM_Bind”。似乎端口12000仍由系统占用。
我使用我所知道的所有工具(processexplorer、tcpview、netstat-an等)尝试查找进程,但都没有成功。只有机器重启才能解决问题。但问题在一两个晚上又出现了。
阅读一些资料后,我发现我正在使用无限超时的
sockect.accept()
,因此我将其更改为
socket.setSoTimeout(15000);
socket.accept();
我已经使用新版本,但问题仍然存在。机器已升级Windows更新。我使用已完全更新的相同Windows版本进行测试,但无法复制。我已经没有解决方案了。你有任何想法吗?
谢谢。
socket.accept(15000)
是什么? - user207421