「java.net.BindException:すでに使用されているアドレス:JVM_Bind」エラーを解決するにはどうすればよいですか?


187

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

なぜ今登場したのかはわかりませんが、ほんの数時間前に問題なく動作しました。マシンを再起動する必要がありますか?どうすればその底に到達できますか?ヒントやアドバイスはありがたいです。


1
コードのトライアルを実行しているときに、開発マシンでこれがよく見られます-問題を回避するにはどうすればよいですか?
意志

回答:


141

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

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


簡単な回避策:サーバービューを開き、サーバーをダブルクリックし、使用するポート番号を変更します(例:Tomcat管理者、HTTP / 1.1、およびAJP / 1.3の場合)
Adrien Be

2
@novice_developer netstatは、-aオプションと-pオプションを使用して探しているコマンドman netstatであり、残りのすべての友達です:)
モニカとのsox

1
上記のプロセスが機能しない場合は、PCを1度再起動すれば機能すると思います。それは私の場合に働き始めました。
Kumar

195

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

たとえば、lsof -i:8080ポート8080で実行されているプロセス(pid)を一覧表示するには、

次に、プロセスを終了します kill <pid>


4
はい、それはLinuxです。次に、Windowsで同等のものを試します。多分これは助けることができます:stackoverflow.com/questions/15708/lsof-equivalent-for-windows
Diego Pino

1
だから私はRaspbianを使っていて、それは:bash:lsof:コマンドが見つかりませんでした 助言がありますか?
Mona Jalal 2016年

1
@MonaJalalうーん、わかりませんが、おそらく次のようなものを試してみてくださいsudo apt-get install lsof
Coffee

@DiegoPino私がjava.net.BindException: Address already in use (Bind failed) 使用lsof -i:8080して取得しtcp6 0 0 :::8080 :::* LISTEN 106872/javaたのと同じエラーに直面しています。私は何をすべきか ?Javaを殺す??
Avijit Barua

@AvijitBaruaこのポートにバインドされたJavaプログラムのプロセスID(pid)は106872です。起動するすべてのJavaプログラムは、プログラムjava(コンパイルされたコードを実行するJava仮想マシン)として表示されます。ですから、重要な(システム)ツールではなく、独自のプログラムである場合は、このJavaプログラムを終了または強制終了することができます。のようなタスクマネージャを見てくださいhtop。たぶん、あなたは殺されるべきではない有効なプログラムによって使用されているポートにバインドしようとします。
xuiqzy

114

ウィンドウ内

netstat -ano

リスニングしているすべてのプロトコル、ポート、プロセスが一覧表示されます。使用する

taskkill -pid "proces to kill" /f

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

 taskkill -pid 431 /f

10
netstat -ano | "number of your port"を見つけます。これをWindowsで特定のポートに使用します。
BlondCode

私にとって(Windows 10を使用)findは機能しませんでしたが、機能findstrしました。誤検知を回避するために、コロンを付加することも役立ちますnetstat -ano | findstr :8080。のは、それが1234年のPIDを返したとしましょう- -あなたは、これはを介して行うことができます。このプロセスの名前を検索したい場合は、これを行ってたtasklist /fi "pid eq 1234」。
スティーブ・チェンバース

34

Macの場合:

キル・プロセス ターミナル:kill <pid>

pidを検索: ターミナル:lsof -i:<port>

ディエゴピノの答えから


11
kill <pid>はMacでは機能しませんでした。kill
Samy Omar

33

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       

    ここでは8080javaプロセスがリスニングするポート番号であり、9488そのプロセスID(PID)です。

  2. 占有されているポートを解放するには、killコマンドを使用してこのプロセスを強制終了する必要があります。

    kill -9 9488

    9488以前のプロセスIDです。-9プロセスの強制停止に使用します。

これでポートが解放され、サーバーを再起動できるようになります。


CentOsサーバーをデジタルオーシャンで構成しています。このプロセスを強制終了した場合、サーバーを再度実行するにはどうすればよいですか?
Avijit Barua

それがあなた自身のプログラムであり、そこに失うデータがない場合にのみ、-9を使用してください。それはプロセスを不明瞭に殺し、-15はプログラムにそれ自身を終了するように伝えます。
xuiqzy

27

(Windowsのみ)

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

コマンドを実行して:

netstat -ano | findstr :yourPortNumber

下の写真に示すように

プロセスID(PID)を取得します。同じプロセスを強制終了するには、次のコマンドを実行します。

taskkill /pid yourid /f

ここに画像の説明を入力してください


7

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

タスクマネージャーで実行されているjava.exeサービスの1つを強制終了することもできます-psは、java.exeとしてもリストされているため、Eclipseを強制終了しないようにしてください。他に何も機能しない場合は、マシンを再起動するとそれがどうしても修正されます。前回のテストでソケットをシャットダウンしていないようです。お役に立てれば。


6

最も単純な答えを探している人(通常は見逃しているため)は、実行中のプロジェクトを停止して、もう一度開始します。ほとんどの場合、以前に実行したプロジェクトを停止することを忘れ、プロジェクトを再実行すると、このような問題が発生します。

写真を添付し​​て、わかりやすくしました(「Springツールスイート」を使用しています)。したがって、同じプロジェクトを再起動する場合は、右端のボタンをクリックするか、最初に右から2番目のボタンをクリックしてプロジェクトを停止し、次に左端のボタンをクリックして実行する必要があります。あなたのプロジェクト。これが新しいプログラマーの数人の問題を解決することを望みます。:)

ここに画像の説明を入力してください


4

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

C:> netstat -a -o

-aすべての接続を表示

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

そして、プロセスを終了します。


2

はい、Guido Simoneが言ったように、同じポートをリッスンしている別のプロセスがあります。 sudo kill $(sudo lsof -t -i:[port number])

例: sudo kill $(sudo lsof -t -i:8080)

しかし、それは私にとってはうまくいきませんでした。私はコマンドを与えました

$ lsof -i:[port] 

そしてそれは何も示していません。

コマンドを使用docker ps -aしてDockerコンテナーをチェックしました が、それらのすべてが生きていません。すべてのコンテナーが停止しました(ただし、覚えているのは、数分前に同じポートで使用された1つのコンテナーを停止したことです)。Dockerが原因ではないことを確認するために、全体を停止しましたコマンドsudo service docker stopを使用してdockerプロセスを実行し、再試行してください。驚いたことに日食はその時エラーを表示しませんでした。それは私のプログラムを完全に実行しました。

私の経験が誰かを助けることを願っています。



1

@Diego Pinoがunixでlsofを使用してプロセスを特定し、それぞれのプロセスを強制終了できると述べているため、ポートは他のプロセスによってすでに使用されています。Windowsの場合は、netstat -anoを使用してプロセスと誰もが取得するポート。目的のポートを検索して強制終了します。

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


1

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

参考のためのスクリーンショット。


コメント/質問で答えないでください。これを削除した方が良いでしょう。
クライシュテルス

1

私の場合、Tomcatはバックグラウンドで実行されていました。Eclipseを使用しているときに、外部サーブレットとしてインストールしました。IntellijのSpring Bootでは、独自のサーバーを持っていますが、すでに占有されている間は起動できません。
私の場合、Tomcatは自動的に起動し、OSをオンにします。そのため、手動でシャットダウンする必要があります。

$ sudo service tomcat stop

もちろん、「tomcat」は、使用しているTomcatのバージョンによって異なります。
それが誰かに役立つことを願っています。


0

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


0

他のプロセスでポートがビジー状態である必要があります。したがって、https: //technet.microsoft.com/en-us/sysinternals/bb897437からTCPViewをダウンロードできます、使用されているポートのプロセスを。

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


0

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

$ lsof -i:[ポート]

(2)別の理由は、ポートがipv6によって使用されていることです、解決策:

/etc/sysctl.confを編集します

これをファイルに追加します

net.ipv6.conf.all.disable_ipv6 = 1

それを効果的にする

$ sudo sysctl -p /etc/sysctl.conf

または単に再起動


0

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

無料のその他のポートを使用するようにアプリケーションを構成すると、アプリケーションが機能していることがわかります。


0

Windowsの場合

  1. プロセスIDを見つける

    netstat -nao | 「8080」を見つける

プロセスIDが数字で表示されます。

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       18856

ここで18856はプロセスIDです

  1. そのプロセスを終了する

    taskkill / PID 18856 / F

出力:成功:PID 18856のプロセスが終了しました。

ここでtaskkillを使用して、プロセスIDを削除しています:18856

linux / Macの場合

sudo kill -9 $(sudo lsof -t -i:8080)

ここではsudo lsof -t -i:8080、sudo killコマンドを使用してプロセスを殺すプロセスを見つけます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.