解决"java.net.BindException:Address in in use"错误?

car*_*ost 20 java tomcat intellij-idea

我正在使用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
Run Code Online (Sandbox Code Playgroud)

现在我通过以下方式手动查找在该端口发生的进程:

lsof -i:1098
Run Code Online (Sandbox Code Playgroud)

我找到了java进程并将其杀死了:

ps aux | grep java

kill -9 20386
Run Code Online (Sandbox Code Playgroud)

这很有效,但我必须这样做每次我打开Intellij.如果我想在不退出Intellij的情况下重新运行服务器,我不能,因为我会收到此错误.有没有人知道这个的永久性修复,而不是每次都手动杀死它?

小智 16

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

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

在JAVA_OPTS中设置这些属性会在启动tomcat和关闭tomcat时尝试启动jmx服务器.因此端口已经在使用异常.您需要为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 =假"

它为我修复的是$ HOME/.bashrc我添加了这个导出:

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

信用:https: //bowerstudios.com/node/636