"java.net.BindException:Address already in use"错误的解决方案?

23
我正在使用Intellij尝试部署Tomcat应用程序,但每次尝试运行时都会出现以下错误:
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 1098; nested exception is: 
java.net.BindException: Address already in use

现在我已经手动查找了发生在那个端口的进程,方法如下:

lsof -i:1098

我找到了 Java 进程并将其终止:

ps aux | grep java

kill -9 20386

这个方法可以解决问题,但我每次打开Intellij都需要这样做。如果我想在不退出Intellij的情况下重新运行服务器,我无法这样做,因为我会得到错误提示。有没有人知道一个永久性的解决方案,而不是每次手动结束进程?


这意味着该端口上仍在运行某些东西。您可以尝试在不同的端口上运行吗? - Jake Arnold
1098 不是 RMI 的端口吗?也许 IntelliJ 正在使用它。换一个端口试试。 - Thomas Uhrig
根据@ThomasUhrig的建议 - 尝试使用8080端口,看看是否仍然存在问题。 - Software Engineer
您正在使用的端口已被占用。请尝试使用其他端口。 - Dipika
@EngineerDollery,我正在使用8080端口,但是JMX端口默认为1098,这就导致了错误。但我不能移除它,因为需要一个端口。 - carbon_ghost
6个回答

23

这是由于 JMX 监控Tomcat实例。Tomcat将在端口9999上运行,因此当JMX要开始检查关闭时,它无法绑定到该端口。

解决此问题的一种方法是定义您的 CATALINA_OPTS 环境变量。

JAVA_OPTS 中设置这些属性会尝试在启动Tomcat时启动jmx服务器,并在关闭Tomcat时再次启动。因此会出现端口已被占用的异常。您需要将这些属性设置为 CATALINA_OPTS 而不是 JAVA_OPTS。这只会在启动Tomcat时运行。

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

对我有效的方法是在$HOME/.bashrc中添加以下导出代码:

export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999"

来源: https://bowerstudios.com/node/636


2

enter image description here在停止服务器后,单击骷髅头图标以结束所有相关进程。这有助于解决端口问题。


看到那个骷髅按钮的先决条件是什么?在我的Spring Boot项目中,在工具栏中没有这样的东西。 - miro
无论是您的服务器仍在运行还是已终止且终止未完成。 - Gayathri

0

我遇到了这个问题,我没有杀掉在同一端口上运行的先前应用程序。我只是使用kill -9 PID将其杀死,然后就没问题了。


0

我在Tomcat中多次发现这个问题。

错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 912 3; nested exception is: java.net.BindException: Address already in use

在Tomcat中, [cc@Cdf bin]$ vim catalina.sh 将9123更改为一个未使用的数字,例如8998。 然后, [cc@Cdf bin]$ ./start.sh;tailf ../logs/catalina.out


0

我在启动SymmetricsDS服务时遇到了这个问题。以下是我针对Linux的解决方案,后来它起作用了。

top | grep java
kill -9 javaPID

0

在项目上右键 --> Run As --> Run Configurations ---> 在左侧选择 Spring Boot App 下的项目 --> 更改 JMX 端口并尝试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接