有时每当我重新启动应用程序时,该应用程序是基于 爪哇 支柱 Mysql和Jboss 4.05版本 我收到错误消息:地址已在使用中:JVM_Bind
我知道的唯一修复方法是重新启动机器并重试,它就会起作用。 否则有时我会执行 Ctrl-Alt-Del 并停止所有与 Java 相关的进程,有时这也有效。
但是确切的原因是什么?我们该如何预防这个问题呢?
地址已被使用:JVM_Bind
意味着其他一些应用程序已经在侦听您当前应用程序尝试绑定的端口。
您需要做的是,更改当前应用程序的端口或更好的端口;只需找出已经运行的应用程序并将其杀死即可。
在 Linux 上,您可以使用以下方式找到应用程序 pid,
netstat -tulpn
在 Windows 中,当 Eclipse 崩溃而没有完全关闭时,就会发生这种情况,它将使本地 Jetty 或 Tomcat 服务器继续运行。 当您重新打开 Eclipse 并尝试再次启动服务器时,这将导致“地址已在使用中:JVM_Bind”
您可以通过打开任务管理器并找到 javaw.exe 进程并将其结束来解决此问题。
然后就可以在Eclipse上重启服务器了。
在 Windows 上,在提升的 cmd/ps 中
net stop winnat
然后
net start winnat
重置 Windows 的 NAT 服务并删除有故障的侦听器。 此方法适用于大多数“无法侦听此端口”错误,例如 Docker、JVM 等。
当服务器(我使用JBoss)的端口已在使用中时,我通常会遇到这种情况
常见嫌疑人
要更改 JBoss 4.2.x 自身绑定的端口,请转到:
“C:\jboss4.2.2\server\default\deploy\jboss-web.deployer\server.xml”
这里默认是服务器的实例 在这里更改端口:
在上面的例子中端口绑定到8080
打开命令行并输入:
netstat -a -o -n
或tasklist
以查看当前正在运行的进程。
找到与 Java 相关的端口并输入:taskkill /F /PID <your PID number>
。
点击输入。
MySql 是否有可能与 JBoss 监听同一个端口?
错误消息中是否给出了端口号 - 类似
Address already in use: JVM_Bind:8080
您可以更改 JBoss server.xml 中的端口来测试这一点。
为了完整起见,除了OP的问题之外,许多人可能会因为其他原因而陷入这个SO,这是另一个拯救我的信息:
TL;博士;
检查您要打开的端口是否未被保留(即使没有应用程序打开它)
在 Windows 上:
netsh interface ipv4 show excludedportrange protocol=tcp
说明:
至少在 Windows 上,导致
java.net.BindException: Address already in use: JVM_Bind
的另一个可能原因是操作系统“保留”了该端口。某些 Windows 更新 像这个 保留范围端口,然后进程就无法再声明该端口。
虽然没有明确说明无法再打开的端口,但更新说明提到了一个可以帮助解决问题的命令:
netsh interface ipv4 show excludedportrange protocol=tcp
这将产生被阻止的端口范围列表:
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
5357 5357
49709 49808
49809 49908
49909 50008
50009 50108
50109 50208
50280 50379
* - Administered port exclusions.
关于如何防止它的快速答案是,您很可能需要在重新启动 JBoss 之前停止它。
您应该能够调用控制台视图中的“终止”按钮来关闭服务器。
该错误意味着您正在尝试在已被另一个
ServerSocket
使用的端口上创建新的 ServerSocket
。因此,请尝试让您的应用程序关闭您知道的所有套接字和连接,并确保您的应用程序完全终止。另请检查您的程序是否启动了其他进程。
也可能是由于..omca中8080端口的双重定义造成的