如何解决“java.net.BindException:Address in in use:JVM_Bind”错误?

时间:2012-10-04 23:07:17

标签: java eclipse networking serversocket

在Eclipse中,我收到了这个错误:

run:
     [java] Error creating the server socket.
     [java] Oct 04, 2012 5:31:38 PM cascadas.ace.AceFactory bootstrap
     [java] SEVERE: Failed to create world : java.net.BindException: Address already in use: JVM_Bind
     [java] Java Result: -1
BUILD SUCCESSFUL
Total time: 10 seconds

我不确定它为什么现在出现,但几个小时前它运行良好。我需要重启机器吗?我如何深究它?我感谢任何提示或建议。

19 个答案:

答案 0 :(得分:163)

如果您知道进程正在运行的端口,可以键入: lsof -i:<port>

例如,lsof -i:8080,列出在端口8080上运行的进程(pid)。

然后使用kill <pid>

终止该过程

答案 1 :(得分:121)

是的,你有另一个进程绑定到同一个端口。

每当我遇到JVM_BIND错误时,来自TCPView

Windows Sysinternals(仅限Windows)是我最喜欢的应用。它显示哪些进程正在侦听哪个端口。它还提供了一个方便的上下文菜单,可以终止进程或关闭阻碍进程的连接。

答案 2 :(得分:92)

在Windows中

netstat -ano

将列出所有协议,端口和进程监听。 使用

taskkill -pid "proces to kill" /f

杀死侦听端口的进程。 e.g

 taskkill -pid 431 /f

答案 3 :(得分:31)

在Mac中:

杀死进程 终端:kill <pid>

查找pid: 终端:lsof -i:<port>

来自Diego Pino回答

答案 4 :(得分:26)

Ubuntu / Unix 中,我们可以按照以下步骤分两步解决此问题。

  1. 输入netstat -plten |grep java

    这将产生类似于:

    的输出
    tcp   0   0 0.0.0.0:8080   0.0.0.0:*  LISTEN   1001  76084  9488/java       
    

    此处8080是java进程正在侦听的端口号,9488是其进程ID(pid)。

  2. 为了释放被占用的端口,我们必须使用kill命令终止此进程。

    kill -9 9488
    

    9488是之前的进程ID。我们使用-9来强制停止该过程。

  3. 您的端口现在应该是免费的,您可以重新启动服务器。

答案 5 :(得分:13)

(仅Windows)

要终止进程,您首先需要找到进程ID(pid)

通过运行命令:

netstat -ano | findstr :yourPortNumber

As shown in picture below

您将获得您的进程ID(PID),现在要杀死同一进程,请运行以下命令:

taskkill /pid yourid /f

enter image description here

答案 6 :(得分:7)

您在同一端口上运行另一个进程。

你可以尝试杀死你的任务管理器中运行的一个java.exe服务 - ps确保你不要杀掉eclipse,因为它也被列为java.exe。如果没有别的办法,重启你的机器无论如何都会解决它。看起来您没有关闭先前测试的套接字。希望这会有所帮助。

答案 7 :(得分:4)

在Windows CMD行中,通过输入以下命令找出在绑定端口上保持连接的进程ID:

C:&GT; netstat -a -o

-a显示所有连接

-o show process identifier

然后终止该过程。

答案 8 :(得分:3)

对于Windows

  1. 查找进程ID

    netstat -nao |找到“ 8080”

它将以数字的形式显示进程ID。

示例

a = b[:]

此处18856是进程ID

  1. 终止该过程

    taskkill / PID 18856 / F

输出:成功:PID 18856的过程已终止。

在这里使用taskkill杀死进程ID:18856

对于linux / Mac

a = []
a[:] = b

在这里您找到使用TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18856 并使用sudo kill命令将其杀死的进程

答案 9 :(得分:2)

是的,正如Guido Simone所说,因为另一个进程正在侦听同一个端口。如果你在Ubuntu中你可以简单地杀死那个进程发出命令 sudo kill $(sudo lsof -t -i:[port number])

ex:sudo kill $(sudo lsof -t -i:8080)

但是一旦它对我不起作用。 我发出了命令

$ lsof -i:[port] 

它没有显示任何内容。

我使用命令检查了我的docker容器 docker ps -a但他们没有活着。所有容器都已停止 (但我记得,我停止了几个分钟前用过相同端口的容器。)。为了确保docker不是原因,我使用命令sudo service docker stop停止整个docker进程并再试一次。 令人惊讶的是,eclipse当时没有显示错误。它完美地运行了我的程序。

希望我的经验会对某人有所帮助。

答案 10 :(得分:1)

端口已被其他进程使用,因为@Diego Pino说你可以在unix上使用lsof来定位进程并杀死相应的进程,如果你在windows上使用netstat -ano来获取所有的进程流程和每个人都获得的端口。搜索你想要的端口并杀死。

如果可能的话,只需重新启动机器即可轻松实现:)

答案 11 :(得分:1)

重启电脑一次,我认为它会起作用。它开始在我的案例中工作。还有一件事可以去任务管理器并结束这个过程。

Screenshot for the reference.

答案 12 :(得分:0)

您可以关闭每个Java进程,然后重新启动您的应用程序:

taskkill /F /IM java.exe

再次启动您的应用...

答案 13 :(得分:0)

在我的情况下,Tomcat在后台运行。使用Eclipse时,我已将其安装为外部servlet。 使用Intellij中的Spring Boot,它拥有自己的服务器,但是在已被占用时无法启动。
在我的情况下,Tomcat自动启动,因此我打开了操作系统,这就是为什么我需要手动关闭它的原因:

$ sudo service tomcat stop

当然,“ tomcat”取决于您使用的是哪个版本的tomcat。
希望对别人有帮助。

答案 14 :(得分:0)

您需要关闭端口 如果您是Linux用户,则键入

fuser -k 8080/tcp

答案 15 :(得分:0)

这意味着其他一些进程已经在使用该端口。如果某个其他关键应用程序正在使用此端口并且您不想关闭该应用程序,则更好的方法是选择任何其他可以免费使用的端口。

将您的应用程序配置为使用任何其他免费的端口,您将看到您的应用程序正在运行。

答案 16 :(得分:0)

(1)检查端口是否正在使用,杀死该进程

$ lsof -i:[port]

(2)另一个原因是ipv6使用了端口,解决方案:

编辑 /etc/sysctl.conf

将其添加到文件

net.ipv6.conf.all.disable_ipv6 = 1

然后使其生效

$ sudo sysctl -p /etc/sysctl.conf

或只是重新启动

答案 17 :(得分:0)

您的端口必须在某些其他进程中忙碌。因此,您可以在https://technet.microsoft.com/en-us/sysinternals/bb897437上下载TCPView并终止使用端口的进程。

如果您不知道您的端口,请双击未启动的服务器,然后单击“打开服务器属性”页面,然后单击左列中的glassfish。你会在这里找到这些端口。

答案 18 :(得分:0)

当我在首先启动Server程序然后启动Client程序时打开两个控制台时,我在Eclipse中遇到了类似的问题。我曾经在单一控制台中停止程序,认为它关闭了服务器,但它只关闭了客户端而不是服务器。我发现在我的任务管理器中运行Java进程。通过从各自的控制台关闭服务器和客户端程序来解决此问题(Eclipse显示最新活动程序的控制台)。因此,当我再次启动Server程序时,端口再次打开以进行捕获。