Wie behebe ich den Fehler “java.net.BindException: Address in use: JVM_Bind”?

In Eclipse habe ich diesen Fehler erhalten:

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 

Ich bin mir nicht sicher, warum es jetzt kam, aber vor ein paar Stunden lief es gut. Muss ich meinen Rechner neu starten? Wie komme ich dem auf den Grund? Ich freue mich über Tipps oder Ratschläge.

Ja, Sie haben einen anderen process, der an denselben Port gebunden ist.

TCPView (nur Windows) von Windows Sysinternals ist meine Lieblings-App, wenn ich einen JVM_BIND-Fehler habe. Es zeigt an, welche processe auf welchen Port warten. Es bietet auch ein praktisches Kontextmenü, um entweder den process zu beenden oder die Verbindung, die in den Weg kommt, zu schließen.

Wenn Sie wissen, auf welchem ​​Port der process läuft, können Sie lsof -i: .

Zum Beispiel lsof -i:8080 , um den auf Port 8080 ausgeführten process (pid) aufzulisten.

Dann kill den process mit kill

In Fenstern

 netstat -ano 

listet alle Protokolle, Ports und processe auf. Benutzen

 taskkill -pid "proces to kill" /f 

um den process zu hören, der den Hafen hört. z.B

  taskkill -pid 431 /f 

In Mac:

process kill Terminal: kill

Finde pid: Terminal: lsof -i:

Von Diego Pino antworten

Unter Ubuntu / Unix können wir dieses Problem lösen, indem wir zwei Schritte ausführen, wie unten beschrieben.

  1. Use netstat -plten |grep java 

Es wird eine Ausgabe wie diese geben

 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1001 76084 9488/java 

Hier ist Port no 8080, bei dem der Java-process läuft. Und seine process-ID ( pid ) ist 9488 vor Java ( 9488/java ).

 2. Now to resolve the Address already in use problem you have to kill this process using this command. 

kill -9 9488

Hier: -9 for force stop und 9488 is process id.

Jetzt wieder den Server laufen lassen. Diese Antwort wird für euch hilfreich sein.

Sie haben einen anderen process auf dem gleichen Port ausgeführt.

Sie könnten versuchen, einen der java.exe-Dienste zu beenden, die in Ihrem Task-Manager ausgeführt werden – ps stellen Sie sicher, dass Sie Eclipse nicht beenden, da dies auch als java.exe aufgeführt ist. Wenn nichts anderes funktioniert, wird das System durch einen Neustart des Computers trotzdem repariert. Es sieht so aus, als ob Sie einen Socket von einem vorherigen Test nicht herunterfahren. Hoffe das hilft.

Suchen Sie in der Windows CMD-Zeile nach der process-ID, die eine Verbindung auf dem Bindungsport enthält, indem Sie den folgenden Befehl eingeben:

C:> netstat -a -o

-a zeige alle Verbindungen

-o zeigt die processkennung an

Und dann den process beenden .

(Nur Windows)

Um einen process zu beenden, müssen Sie zuerst die process-ID (pid) finden

Durch Ausführen des Befehls:

 netstat -ano | findstr :yourPortNumber 

Wie im Bild unten gezeigt

Sie erhalten Ihre process-ID (PID), jetzt, um den gleichen process zu beenden, führen Sie diesen Befehl aus:

 taskkill /pid yourid /f 

Bildbeschreibung hier eingeben

Für diejenigen, die nach den einfachsten Antworten suchen (was wir normalerweise vermissen), stoppen Sie einfach Ihr laufendes Projekt und starten Sie es erneut. Die meiste Zeit vergessen wir, das Projekt, das wir früher ausgeführt haben, zu stoppen, und wenn wir das Projekt erneut durchführen, zeigt sich ein solches Problem.

Ich befestige auch ein Foto, um es klarer zu machen (ich benutze ‘Spring Tool Suite’). Also, was Sie tun müssen, ist entweder auf die Schaltfläche ganz rechts klicken, wenn Sie das gleiche Projekt neu starten möchten oder klicken Sie auf die Schaltfläche, die 2. von rechts ist, um Ihr Projekt zu stoppen und dann auf die Schaltfläche ganz links dein Projekt. Ich hoffe, dass dies das Problem einiger der neueren Programmierer lösen wird. 🙂

Bildbeschreibung hier eingeben

Ja, wie Guido Simone es sagte, weil ein anderer process den gleichen Port hört. Wenn Sie in Ubuntu sind, können Sie einfach diesen process mit dem Befehl sudo kill $(sudo lsof -t -i:[port number]) beenden

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

Aber einmal hat es nicht für mich funktioniert. Ich gab den Befehl

 $ lsof -i:[port] 

und es zeigt nichts.

Ich habe meine Docker-Container mit dem Befehl docker ps -a überprüft, aber keine von ihnen am Leben.Alle Container sind gestoppt (aber ich erinnere mich, ich habe einen Container gestoppt, der vor ein paar Minuten den gleichen Port verwendet hat.) Um sicherzustellen, dass Docker nicht der Grund ist , Ich stoppe den gesamten docker process mit dem Befehl sudo service docker stop und versuche es erneut. Überraschenderweise zeigte Eclipse zu diesem Zeitpunkt den Fehler nicht. Es lief mein Programm perfekt.

Hoffe, meine Erfahrung wird jemandem helfen.

Der Port wird bereits von einem anderen process verwendet, wie @Diego Pino sagte, Sie können lsof auf Unix verwenden, um den process zu finden und den jeweiligen zu töten, wenn Sie unter Windows sind, verwenden Sie netstat -ano, um alle PIDs des processes zu erhalten Häfen, die jeder erwirbt. suche nach deinem beabsichtigten Port und töte.

Um ganz einfach zu sein, starte einfach deine Maschine neu, falls das möglich ist 🙂

Starten Sie den PC einmal neu, ich denke, es wird funktionieren. Es fing in meinem Fall an zu arbeiten. Eine weitere Sache kann getan werden, gehen Sie zum Task-Manager und beenden Sie den process.

Screenshot für die Referenz.

Ich hatte ein ähnliches Problem in Eclipse, als zwei Konsolen geöffnet wurden, als ich zuerst das Server-Programm und dann das Client-Programm startete. Ich habe das Programm in der Einzelkonsole gestoppt und dachte, dass es den Server geschlossen hat, aber es hat nur den Client und nicht den Server geschlossen. Ich habe laufende Java-processe in meinem Task-Manager gefunden. Dieses Problem wurde getriggers, indem sowohl die Server- als auch die Client-Programme von ihren einzelnen Konsolen aus geschlossen wurden (Eclipse zeigt die Konsole des letzten aktiven Programms an). Als ich das Server-Programm erneut startete, war der Port wieder offen, um erfasst zu werden.

Ihr Port muss in einem anderen process belegt sein. So können Sie TCPView unter https://technet.microsoft.com/en-us/sysinternals/bb897437 herunterladen und den process für den verwendeten Port beenden.

Wenn Sie Ihren Port nicht kennen, doppelklicken Sie auf den Server, der nicht startet, und klicken Sie auf Open Server Properties Page und dann auf Glassfish in der linken Spalte. Sie finden die Ports hier.

(1) Überprüfen Sie, ob der Port verwendet wird oder nicht. Beenden Sie diesen Vorgang

$ lsof -i: [port]

(2) ein weiterer Grund ist der Port wird von ipv6, Lösung verwendet:

editieren Sie /etc/sysctl.conf

füge das zur Datei hinzu

net.ipv6.conf.all.disable_ipv6 = 1

dann mache es Wirkung

$ sudo sysctl -p /etc/sysctl.conf

oder einfach neu starten

Es bedeutet, dass ein anderer process den Port bereits verwendet. Wenn dieser Port von anderen kritischen Anwendungen verwendet wird und Sie diese Anwendung nicht schließen möchten, ist es besser, einen anderen Port zu wählen, der frei verwendet werden kann.

Konfigurieren Sie Ihre Anwendung so, dass sie jeden anderen Port verwendet, der kostenlos ist, und Sie sehen, dass Ihre Anwendung funktioniert.