W Eclipse dostałem ten błąd:
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
Nie jestem pewien, dlaczego to się teraz pojawiło, ale działało dobrze kilka godzin temu. Czy muszę ponownie uruchomić komputer? Jak dojść do sedna? Doceniam wszelkie wskazówki lub porady.
Odpowiedzi:
Tak, masz inny proces związany z tym samym portem.
TCPView (tylko Windows) z Windows Sysinternals to moja ulubiona aplikacja, gdy tylko pojawia się błąd JVM_BIND. Pokazuje, które procesy nasłuchują na którym porcie. Zapewnia również wygodne menu kontekstowe, w którym można albo zabić proces, albo zamknąć przeszkadzające połączenie.
źródło
netstat
jest poleceniem, którego szukasz, z opcjami -a i -p,man netstat
jest twoim przyjacielem dla całej reszty :)Jeśli wiesz, na jakim porcie działa proces, możesz wpisać:
lsof -i:<port>
.Na przykład,
lsof -i:8080
aby wyświetlić proces (pid) uruchomiony na porcie 8080.Następnie zabij proces za pomocą
kill <pid>
źródło
sudo apt-get install lsof
java.net.BindException: Address already in use (Bind failed)
którego użyłemlsof -i:8080
i dostałemtcp6 0 0 :::8080 :::* LISTEN 106872/java
. Co powinienem zrobić ? Kill Java?htop
. Być może próbujesz połączyć się z portem używanym przez prawidłowy program, którego nie należy zabijać.W systemie Windows
wyświetli listę wszystkich protokołów, portów i procesów nasłuchujących. Posługiwać się
aby zabić proces nasłuchujący na porcie. na przykład
źródło
find
nie działało, ale działałofindstr
. Aby uniknąć fałszywych trafień, pomaga także przygotować dwukropek, npnetstat -ano | findstr :8080
. Po zrobieniu tego - powiedzmy, że zwrócił PID 1234 - jeśli chcesz sprawdzić nazwę tego procesu, możesz to zrobić za pomocątasklist /fi "pid eq 1234
".W systemie Mac:
Terminal procesu zabicia :
kill <pid>
Znajdź pid: Terminal:
lsof -i:<port>
Odpowiedź Diego Pino
źródło
W Ubuntu / Unix możemy rozwiązać ten problem w 2 krokach, jak opisano poniżej.
Rodzaj
netstat -plten |grep java
To da wynik podobny do:
Oto
8080
numer portu, pod którym nasłuchuje proces Java, i9488
jego identyfikator procesu (pid).Aby uwolnić zajęty port, musimy zabić ten proces za pomocą
kill
polecenia.9488
to identyfikator procesu wcześniejszy. Używamy,-9
aby wymusić zatrzymanie procesu.Twój port powinien być teraz wolny i możesz zrestartować serwer.
źródło
(Tylko Windows)
Aby zabić proces, najpierw musisz znaleźć identyfikator procesu (pid)
Uruchamiając polecenie:
Otrzymasz swój identyfikator procesu (PID). Teraz, aby zabić ten sam proces, uruchom polecenie:
źródło
Masz inny proces działający na tym samym porcie.
Możesz spróbować zabić jedną z usług java.exe uruchomionych w menedżerze zadań - ps upewnij się, że nie zabijasz zaćmienia, ponieważ jest ono również wymienione jako java.exe. Jeśli nic innego nie zadziała, zrestartowanie komputera i tak go naprawi. Wygląda na to, że nie wyłączasz gniazda z poprzedniego testu. Mam nadzieję że to pomoże.
źródło
Dla tych, którzy szukają najprostszych odpowiedzi (bo tego zwykle brakuje), po prostu zatrzymaj swój projekt i zacznij go od nowa. W większości przypadków zapominamy zatrzymać projekt, który uruchomiliśmy wcześniej, a kiedy ponownie uruchamiamy projekt, pojawia się taki problem.
Załączam również zdjęcie, aby było bardziej przejrzyste (używam „pakietu narzędzi Spring”). Więc co musisz zrobić, to albo kliknąć przycisk po prawej stronie, jeśli chcesz ponownie uruchomić ten sam projekt, albo najpierw kliknąć przycisk, który jest drugi z prawej strony, aby zatrzymać projekt, a następnie przycisk po lewej stronie, aby uruchomić Twój projekt. Mam nadzieję, że rozwiąże to problem kilku nowszych programistów. :)
źródło
W wierszu CMD systemu Windows znajdź identyfikator procesu, który utrzymuje połączenie na porcie powiązania, wprowadzając następujące polecenie:
C:> netstat -a -o
-a pokaż wszystkie połączenia
-o pokaż identyfikator procesu
A następnie zakończ proces.
źródło
Tak, jak powiedział Guido Simone, ponieważ inny proces nasłuchuje na tym samym porcie. Jeśli jesteś w Ubuntu, możesz po prostu zabić ten proces, wydając polecenie
sudo kill $(sudo lsof -t -i:[port number])
dawny:
sudo kill $(sudo lsof -t -i:8080)
Ale kiedyś mi się nie udało. wydałem polecenie
i nic nie pokazuje.
Sprawdziłem kontenery dokerów za pomocą polecenia,
docker ps -a
ale żaden z nich nie żył. Wszystkie kontenery zatrzymały się (ale pamiętam, zatrzymałem jeden kontener, który był używany ten sam port kilka minut temu.). Aby upewnić się, że doker nie jest powodem, zatrzymuję cały dokuj proces za pomocą poleceniasudo service docker stop
i spróbuj ponownie. Zaskakujące zaćmienie nie pokazało wtedy błędu. To uruchomiło mój program idealnie.Mam nadzieję, że moje doświadczenie pomoże komuś.
źródło
Musisz zamknąć swój port, jeśli jesteś użytkownikiem Linuksa, a następnie wpisz
źródło
Port jest już używany przez inny proces, ponieważ @Diego Pino powiedział, że możesz użyć lsof na unixie, aby zlokalizować proces i zabić odpowiedni, jeśli korzystasz z systemu Windows, użyj netstat -ano, aby uzyskać wszystkie pid procesu i porty, które wszyscy nabywają. wyszukaj zamierzony port i zabij.
bardzo łatwo zrestartuj komputer, jeśli to możliwe :)
źródło
Ponownie uruchom komputer, myślę, że zadziała. Zaczęło działać w moim przypadku. Jeszcze jedną rzecz można zrobić, przejdź do Menedżera zadań i zakończ proces.
źródło
W moim przypadku Tomcat działał w tle. Zainstalowałem go jako zewnętrzny serwlet podczas korzystania z Eclipse. Dzięki Spring Boot w Intellij ma własny serwer, ale nie można go uruchomić, gdy jest już zajęty.
W moim przypadku Tomcat uruchamia się automatycznie Włączam system operacyjny, dlatego muszę go ręcznie wyłączyć:
oczywiście „tomcat” zależy od używanej wersji tomcat.
Mam nadzieję, że może komuś pomóc.
źródło
Podobny problem wystąpił w środowisku Eclipse, gdy dwie konsole zostały otwarte, kiedy najpierw uruchomiłem program serwera, a następnie program klienta. Kiedyś zatrzymywałem program w pojedynczej konsoli, myśląc, że zamknął serwer, ale zamknął tylko klienta, a nie serwer. Znalazłem uruchomione procesy Java w moim menedżerze zadań. Ten problem został rozwiązany przez zamknięcie programów serwera i klienta z ich indywidualnych konsol (Eclipse pokazuje konsolę najnowszego aktywnego programu). Więc kiedy ponownie uruchomiłem program serwera, port był ponownie otwarty do przechwycenia.
źródło
Twój port musi być zajęty w innym procesie. Możesz więc pobrać TCPView na https://technet.microsoft.com/en-us/sysinternals/bb897437 i zabić proces dla używanego portu.
Jeśli nie znasz swojego portu, kliknij dwukrotnie serwer, który się nie uruchamia, kliknij opcję Otwórz stronę właściwości serwera i kliknij szklaną rybkę z lewej kolumny. Porty znajdziesz tutaj.
źródło
(1) sprawdź, czy port jest używany, czy nie, zabij ten proces
$ lsof -i: [port]
(2) innym powodem jest to, że port jest używany przez ipv6, rozwiązanie:
edytuj /etc/sysctl.conf
dodaj to do pliku
net.ipv6.conf.all.disable_ipv6 = 1
to zrób efekt
$ sudo sysctl -p /etc/sysctl.conf
lub po prostu uruchom ponownie
źródło
Oznacza to, że jakiś inny proces już korzysta z portu. Jeśli ten port jest używany przez inne krytyczne aplikacje i nie chcesz go zamykać, lepszym sposobem jest wybranie dowolnego innego portu, z którego można korzystać bezpłatnie.
Skonfiguruj aplikację tak, aby korzystała z dowolnego innego wolnego portu, a zobaczysz, że aplikacja działa.
źródło
W systemie Windows :
Znajdź identyfikator procesu
netstat -nao | znajdź „8080”
Wyświetli identyfikator procesu jako liczbę.
Przykład :
Tutaj 18856 jest identyfikatorem procesu
Zabij ten proces
taskkill / PID 18856 / F
Wynik : SUKCES: Proces z PID 18856 został zakończony.
Tutaj za pomocą zadania zabijasz identyfikator procesu: 18856
W przypadku systemu Linux / Mac :
Tutaj znajdziesz proces używania
sudo lsof -t -i:8080
i zabijania go za pomocą polecenia sudo killźródło