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

在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

我不知道为什么现在出现了,但几个小时前它运行得很好。我需要重新启动我的机器吗?我该怎么查到底呢?感谢您的建议和建议。

848755 次浏览

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

你可以尝试杀死一个运行在你的任务管理器中的java.exe服务- ps确保你没有杀死eclipse,因为它也被列为java.exe。如果其他方法都不起作用,重新启动机器无论如何都会修复它。看起来你没有关闭之前测试中的套接字。希望这能有所帮助。

如果你知道进程正在运行的端口,你可以输入: lsof -i:<port>。< / p >

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

然后用kill <pid>终止进程

端口已经被一些其他进程使用,@Diego Pino说你可以在unix上使用lsof来定位进程并杀死相应的进程,如果你在windows上使用netstat -ano来获得所有进程的pid和每个人获得的端口。搜索你的目标港口并杀死。

如果可能的话,重启你的机器就很简单了:)

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

当我遇到JVM_BIND错误时,来自Windows SysinternalsTCPView(仅限Windows)是我最喜欢的应用程序。它显示了哪个进程正在侦听哪个端口。它还提供了一个方便的上下文菜单来终止进程或关闭妨碍进程的连接。

在Mac:

< >强杀的过程 终端:kill <pid> < / p >

< >强找到pid: 终端:lsof -i:<port> < / p >

来自Diego Pino的回答

在windows中

netstat -ano

将列出所有正在监听的协议、端口和进程。 使用< / p >

taskkill -pid "proces to kill" /f

关闭监听端口的进程。 如< / p >

 taskkill -pid 431 /f

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

C:> netstat -a -o

显示所有连接

-o show进程标识符

然后终止进程。

Ubuntu / Unix中,我们可以在下面描述的2个步骤中解决这个问题。

  1. < p > 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强制停止进程。< / p >

您的端口现在应该是空闲的,您可以重新启动服务器。

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

您的端口在其他进程中一定很忙。因此,你可以在https://technet.microsoft.com/en-us/sysinternals/bb897437上下载TCPView,并为使用的端口杀死进程。

如果你不知道你的端口,双击没有启动的服务器,然后点击打开服务器属性页,然后点击左边栏的glassfish。你会在这里找到港口。

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

$ lsof:[port]

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

编辑/etc/sysctl.conf

将此添加到文件中

net.ipv6.conf.all。Disable_ipv6 = 1

然后让它生效

$ sudo sysctl -p /etc/sysctl.conf

或者重启

对于那些正在寻找最简单的答案的人(因为这是我们通常错过的),只需停止正在运行的项目并重新开始。 大多数情况下,我们所做的是忘记停止我们之前运行的项目,当我们重新运行项目时,它会显示这样的问题。< / p > 我还附上了一张照片,让它更清晰(我使用“Spring工具套件”)。 所以你需要做的是点击最右边的按钮,如果你想重新启动同一个项目,或者首先点击右边第二个按钮来停止你的项目,然后点击最左边的按钮来运行你的项目。我希望这将解决少数新程序员的问题。:) < / p >

enter image description here

是的,正如Guido Simone所说,因为另一个进程侦听相同的端口。如果你使用的是Ubuntu,你可以简单地杀死这个进程 sudo kill $(sudo lsof -t -i:[port number]) < / p >

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

但是有一次它对我不起作用。 我给出命令

$ lsof -i:[port]

它什么也没有显示。

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

希望我的经验能帮助到一些人。

这意味着其他进程已经在使用该端口。如果这个端口正在被其他一些重要的应用程序使用,而您不想关闭该应用程序,那么更好的方法是选择任何其他可以自由使用的端口。

将应用程序配置为使用任何其他空闲端口,您将看到应用程序正常工作。

重新启动电脑一次,我想它会工作。它开始在我身上起作用。还有一件事可以做,进入任务管理器并结束该过程。

截图供参考。 < / >

(Windows)

要终止一个进程,首先需要找到进程Id (pid)

通过运行命令:

netstat -ano | findstr :yourPortNumber

如下图所示 .

你会得到你的进程Id (PID),现在要杀死相同的进程运行这个命令:

taskkill /pid yourid /f

enter image description here

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

fuser -k 8080/tcp

在我的例子中,Tomcat在后台运行。我在使用Eclipse时将其安装为外部servlet。 在Intellij中使用Spring Boot,它有自己的服务器,但在已被占用时不能启动 在我的例子中,Tomcat自动启动,我打开我的操作系统,这就是为什么我需要手动关闭他:

$ sudo service tomcat stop

当然“tomcat”取决于您使用的tomcat版本。

.

.

对于windows:

  1. < p > 查找进程id

    Netstat -nao |查找"8080"

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

例子:

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       18856

这里18856是进程ID

  1. < p > 终止这个过程

    taskkill /PID 18856 /F

输出: SUCCESS: PID为18856的进程已被终止。

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

对于linux / Mac:

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

在这里你可以找到端口8080的进程,使用sudo lsof -t -i:8080并通过sudo kill命令杀死它

你可以关闭所有的Java进程,然后重新启动你的应用程序:

taskkill /F /IM java.exe

再次启动应用程序…

当另一个进程已经在指定端口(8080)上运行时,就会出现这个BindException异常。

您可以使用以下方法中的任何一种。

  1. 修改服务器端口:如果您使用Tomcat服务器和IntelliJ IDE,可以通过配置Tomcat服务器来配置服务器端口

    enter image description here

  • 进入“tomcat>conf”文件夹
  • 编辑server.xml
  • 搜索“连接器端口”;
  • 取代“8080”;根据你的港口号码
  • 重启tomcat服务器。
  1. 终止该端口中正在运行的现有进程并启动服务器。

对于Linux / Mac

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

对于Windows

netstat -ano | findstr :8080
taskkill /PID typeyourPIDhere /F

注意: (/F强制终止进程)

我实际上只是在控制台选项卡中使用了终止按钮。它是一个红色的小盒子。希望这对你有所帮助。