web-dev-qa-db-ja.com

「Java.net.BindException:Address already already use:JVM_Bind」エラーを解決するにはどうすればよいですか?

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

どうして今出てきたのかはわかりませんが、ほんの数時間前に問題なく実行されました。マシンを再起動する必要がありますか?どうやって一番下に行くのですか?私はどんなアドバイスやアドバイスにも感謝します。

146
Coffee

はい、同じポートに別のプロセスがバインドされています。

TCPView (Windowsのみ) Windows Sysinternals は、JVM_BINDエラーが発生したときに私のお気に入りのアプリケーションです。どのプロセスがどのポートをリッスンしているかを示します。また、プロセスを強制終了するか、邪魔になっている接続を閉じるための便利なコンテキストメニューも提供します。

121
Guido Simone

プロセスが実行しているポートがわかっている場合は、lsof -i:<port>と入力できます。

たとえば、ポート8080で実行中のプロセス(pid)を一覧表示するには、lsof -i:8080と入力します。

それからkill <pid>でプロセスを強制終了してください

162
Diego Pino

窓の中

netstat -ano

待機しているすべてのプロトコル、ポート、およびプロセスをリストします。つかいます

taskkill -pid "proces to kill" /f

ポートをlistenしているプロセスを強制終了する。例えば

 taskkill -pid 431 /f
92
Abhi

Macの場合

キルプロセス Terminal:kill <pid>

pidを探します: Terminal:lsof -i:<port>

ディエゴピノ回答から

30
Hoyin

Ubuntu/Unix では、以下のように2段階でこの問題を解決できます。

  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を使用します。

これでポートは空いているはずです。サーバーを再起動できます。

24
Bharti Rawat

(Windowsのみ)

プロセスを強制終了するには、まずプロセスID(pid)を見つける必要があります。

次のコマンドを実行してください。

netstat -ano | findstr :yourPortNumber

As shown in picture below

あなたはあなたのプロセスID(PID)を取得するでしょう、今同じプロセスを殺すためにこのコマンドを実行します。

taskkill /pid yourid /f

enter image description here

13
Sufiyan Ansari

同じポートで別のプロセスが実行されています。

タスクマネージャで実行中のJava.exeサービスの1つを殺してみることもできます - ps - Eclipseを強制終了しないでください。Java.exeとしてリストされているからです。他に何もうまくいかなければ、とにかくあなたのマシンを再起動することはそれを直すでしょう。前回のテストでソケットをシャットダウンしていないようです。お役に立てれば。

7
javarebel

Windows CMD行で、次のコマンドを入力して、バインドポートで接続を保持しているプロセスIDを見つけます。

C:> netstat -a -o

-aすべての接続を表示

-oプロセス識別子を表示する

そして 終了 プロセス。

4
CharlesX

最も単純な答え を探している人のために(それは私たちが通常見逃しているものですので)、単にあなたの実行中のプロジェクトを止めて、もう一度始めてください。私たちがしていることのほとんどは、以前に実行したプロジェクトをやめることを忘れていて、プロジェクトを再実行すると、そのような問題を示しています。

私はそれをより明確にするために写真を添付し​​ています(私は 'Spring tool suite'を使います)。同じプロジェクトを再起動する場合は、右端のボタンをクリックするか、右から2番目のボタンをクリックしてプロジェクトを停止し、次に左端のボタンをクリックして実行します。あなたのプロジェクト私はこれが新しいプログラマーの数人の問題を解決することを願っています。 :)

enter image description here

4
Learner

はい、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コンテナをチェックしましたが、それらのどれもが生きていません。理由は、コマンドSudo service docker stopを使用してdockerプロセス全体を停止し、再試行します。驚いたことに、その時点でEclipseはエラーを表示しませんでした。プログラムを完全に実行しました。

私の経験が役に立つことを願っています。

2
Yasitha Bandara

一度PCを再起動すると、うまくいくと思います。私の場合は動き始めました。もう1つ、タスクマネージャに行き、プロセスを終了します。

Screenshot for the reference.

1
Kumar

@Diego Pinoは、UNIX上でlsofを使用してプロセスを特定し、それぞれのプロセスを強制終了することができると述べたため、ポートはすでに他のプロセスによって使用されています。みんなが手に入れたportsあなたの意図したportを探して殺します。

それが可能であれば、非常に簡単にするには、単にあなたのマシンを再起動してください:)

1
Akash Yadav

(1)ポートが使用中かどうか確認し、そのプロセスを強制終了する

$ lsof -i:[port]

(2)もう1つの理由は、ポートがipv6によって使用されているという解決策です。

編集 /etc/sysctl.conf

これをファイルに追加する

net.ipv6.conf.all.disable_ipv6 = 1

それからそれを効果的にする

$ Sudo sysctl -p /etc/sysctl.conf

または単に再起動する

0
tonysok

最初にサーバープログラムを起動し、次にクライアントプログラムを起動したときに2つのコンソールが開かれたとき、私はEclipseで同様の問題に直面しました。私は以前、プログラムがサーバーを閉じたと思って単一のコンソールで停止していましたが、クライアントは閉じただけでサーバーは閉じていませんでした。タスクマネージャで実行中のJavaプロセスを見つけました。この問題は、個々のコンソールからサーバーとクライアントの両方のプログラムを閉じることで解決されました(Eclipseは最新のアクティブプログラムのコンソールを表示します)。だから私は再びサーバープログラムを起動したとき、ポートは再びキャプチャするために開いていました。

0
Chetan Gowda

あなたがLinuxユーザーなら、あなたのポートを閉じる必要があります。

fuser -k 8080/tcp
0

あなたの移植は他のプロセスで忙しいに違いありません。 TCPViewを https://technet.Microsoft.com/ja-jp/sysinternals/bb897437 にダウンロードして、使用されているポートのプロセスを強制終了することができます。

ポートがわからない場合は、起動していないサーバーをダブルクリックし、[サーバーのプロパティページを開く]をクリックして、左側の列からglassfishをクリックします。ここにポートがあります。

0
suketup

他のプロセスがすでにポートを使用していることを意味します。このポートが他の重要なアプリケーションによって使用されていて、そのアプリケーションを閉じたくない場合は、自由に使用できる他のポートを選択することをお勧めします。

空いている他のポートを使用するようにアプリケーションを設定すると、アプリケーションは動作します。

0
Rakesh Burbure