234

在 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

我不知道为什么它现在出现了,但它在几个小时前运行良好。我需要重新启动机器吗?我怎样才能找到它的底部?我感谢任何提示或建议。

4

21 回答 21

229

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

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

然后杀死进程kill <pid>

于 2012-10-04T23:20:52.380 回答
164

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

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

于 2012-10-05T00:13:10.833 回答
135

在窗口中

netstat -ano

将列出所有正在侦听的协议、端口和进程。采用

taskkill -pid "proces to kill" /f

杀死监听端口的进程。例如

 taskkill -pid 431 /f
于 2014-10-01T18:00:05.307 回答
43

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用来强制停止进程。

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

于 2016-06-04T05:45:26.630 回答
39

在 Mac 中:

杀死进程 终端:kill <pid>

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

来自迭戈皮诺的回答

于 2013-03-01T08:46:42.620 回答
33

(仅限 Windows)

要杀死一个进程,您首先需要找到进程 ID (pid)

通过运行命令:

netstat -ano | findstr :yourPortNumber

如下图所示

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

taskkill /pid yourid /f

在此处输入图像描述

于 2018-06-25T08:35:34.133 回答
17

对于窗户

  1. 查找进程 ID

    网络统计-nao | 找到“8080”

它会将进程 ID 显示为数字。

示例

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       18856

这里18856是进程ID

  1. 杀死那个进程

    taskkill /PID 18856 /F

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

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

对于 Linux/Mac

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

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

于 2020-04-29T08:06:18.567 回答
9

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

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

于 2012-10-04T23:11:05.437 回答
9

对于那些正在寻找最简单答案的人(因为这是我们通常会错过的),只需停止正在运行的项目并重新启动它。大多数时候我们所做的是忘记停止我们之前运行的项目,当我们重新运行项目时,它会显示这样的问题。

我还附上了一张照片以使其更清晰(我使用“弹簧工具套件”)。所以你需要做的是要么点击最右边的按钮,如果你想重新启动同一个项目,或者首先点击右边第二个按钮来停止你的项目,然后点击最左边的按钮来运行你的项目。我希望这将解决少数新程序员的问题。:)

在此处输入图像描述

于 2017-02-24T07:46:47.820 回答
5

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

C:> netstat -a -o

-a 显示所有连接

-o 显示进程标识符

然后终止进程。

于 2015-08-17T08:15:00.493 回答
5

如果您是 linux 用户,则需要关闭您的端口,然后输入

fuser -k 8080/tcp
于 2018-11-01T06:43:42.960 回答
4

当另一个进程已在指定端口 (8080) 中运行时,会出现此 BindException。

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

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

    在此处输入图像描述

或者

  • 转到 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强制终止进程)

于 2021-08-17T07:58:58.323 回答
3

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

前任:sudo kill $(sudo lsof -t -i:8080)

但是一旦它对我不起作用。我下达了命令

$ lsof -i:[port] 

它什么也没显示。

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

希望我的经验可以帮助一些人。

于 2017-09-03T07:39:15.787 回答
2

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

如果可能的话,只需重新启动您的机器就很容易了:)

于 2012-10-05T00:08:37.253 回答
2

重新启动PC一次,我认为它会工作。它开始在我的情况下工作。可以做一件事去任务管理器并结束进程。

截图供参考。

于 2018-05-16T08:57:07.923 回答
2

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

$ sudo service tomcat stop

当然,“tomcat”取决于您使用的 tomcat 版本。
希望它可能对某人有所帮助。

于 2019-10-15T10:25:19.827 回答
0

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

于 2016-07-18T10:17:44.137 回答
0

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

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

于 2016-08-18T08:01:16.313 回答
0

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

$ lsof -i:[端口]

(2)还有一个原因是ipv6使用的端口,解决方法:

编辑/etc/sysctl.conf

将此添加到文件中

net.ipv6.conf.all.disable_ipv6 = 1

然后让它生效

$ sudo sysctl -p /etc/sysctl.conf

或者只是重新启动

于 2017-02-17T17:43:55.447 回答
0

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

配置您的应用程序以使用任何其他免费端口,您将看到您的应用程序正常工作。

于 2018-01-31T07:32:07.870 回答
0

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

taskkill /F /IM java.exe

再次启动您的应用程序...

于 2020-09-28T23:08:04.447 回答