web-dev-qa-db-ja.com

「Java.net.BindException:アドレスはすでに使用されています」エラーの解決策は?

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を終了せずにサーバーを再実行する場合、このエラーが発生するため、実行できません。誰もが毎回手動でそれを殺すだけでなく、これに対する永続的な修正を知っていますか?

19
carbon_ghost

これは、Tomcatインスタンスを監視するJMXによるものです。 Tomcatはポート9999で実行されるため、JMXがシャットダウンの確認を開始する場合、このポートにバインドできません。

これを修正する1つの方法は、CATALINA_OPTS環境変数を定義することです。

Java_OPTSでこれらのプロパティを設定すると、Tomcatの起動時およびTomcatのシャットダウン時にjmxサーバーの起動が試行されます。したがって、ポートはすでに使用中の例外です。これらのプロパティは、Java_OPTSではなくCATALINA_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

14
digicyc

enter image description hereサーバーを停止した後にスカルアイコンをクリックして、関連するすべてのプロセスを強制終了します。これは、ポートの問題の解決に役立つはずです。

2
Gayathri

この質問はTomcatで何度も見つけました。

例:代理抛出异常:Java.rmi.server.ExportException:すでに使用されているポート:912 3;ネストされた例外: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
Lucas