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

新手上路,请多包涵

我正在使用 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 的情况下重新运行服务器,我不能,因为我会收到此错误。有谁知道永久修复这个而不是每次都手动杀死它?

原文由 carbon_ghost 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

这是由于 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=false"

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

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

学分: https ://bowerstudios.com/node/636

原文由 digicyc 发布,翻译遵循 CC BY-SA 4.0 许可协议

在此处输入图像描述停止服务器后单击骷髅图标以终止所有相关进程。这应该有助于解决端口问题。

原文由 Gayathri 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题