地址已在使用中:JVM_Bind 但未列出使用带有 netstat 的端口的进程

Posted

技术标签:

【中文标题】地址已在使用中:JVM_Bind 但未列出使用带有 netstat 的端口的进程【英文标题】:Address already in use: JVM_Bind but no process is listed using port with netstat 【发布时间】:2018-12-27 23:30:50 【问题描述】:

我有一个使用 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 版本进行了测试,但我无法重现。

我现在没办法了。

任何想法 谢谢

【问题讨论】:

什么是socket.accept(15000) 您能保证服务在被告知停止时已正常停止吗? @EJP 固定,我的意思是 setSoTimeout(15000)。 @Compass 该进程不再列在任务管理器和 ProcessExplorer 中。我还收到了我的最后一条日志消息 2018-07-19 04:05:02,875 [main] INFO CommunicationCoreServer - 已关闭。 设置接受超时与它有什么关系? 【参考方案1】:

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

解决方法请参考Address Bind exception in Tomcat。

【讨论】:

根据链接的答案更新 Windows 7,也解决了我们的问题。谢谢【参考方案2】:

我在这里遇到同样的问题。我有几个 Java 实例作为服务器运行,但是一旦这些 Java 应用程序中的任何一个被终止并重新启动,它们就会抱怨端口仍在使用中。以前从来没有发生过,我过去常常重新启动它们。

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

顺便说一句,我正在使用一个工具来监控端口和应用程序,并且这些端口没有被任何程序使用,所以应用程序实际上被杀死了。

【讨论】:

您找到解决方案了吗?或者可能是哪个 Windows KB 导致了问题?

以上是关于地址已在使用中:JVM_Bind 但未列出使用带有 netstat 的端口的进程的主要内容,如果未能解决你的问题,请参考以下文章

Grails 项目运行错误 - 服务器无法为端口 8080 启动:地址已在使用中:JVM_Bind

java.net.BindException:地址已在使用中:JVM_Bind [重复]

地址已在使用中:JVM_Bind java

JAVA:java.net.BindException:地址已在使用:JVM_Bind [重复]

通过 SSH 隧道的 Java Swing 应用程序 MySQL 连接失败,并显示“本地端口 127.0.0.1:...无法绑定...地址已在使用中:JVM_Bind”

线程“main”java.net.BindException中的绑定服务器套接字异常:地址已在使用:JVM_Bind java [重复]