"java.net"을 해결 방법Bind Exception:이미 사용 중인 주소: JVM_Bind" 오류입니까?
이클립스에서 다음 오류가 발생했습니다.
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
왜 지금 나왔는지는 모르겠지만, 몇 시간 전만 해도 잘 작동했어요.기계를 재부팅해야 합니까?어떻게 하면 진상을 파헤칠 수 있을까요?조언해 주셔서 감사합니다.
하고 있는지 있는 다음과 같이 할 수 lsof -i:<port>
를 들면, 「 」입니다.lsof -i:8080
포트 8080에서 실행되고 있는 프로세스(pid)를 나열합니다.
다음 이 합니다.kill <pid>
네, 같은 포트에 바인드된 다른 프로세스가 있습니다.
Windows Sysinternals의 TCPView(Windows 전용)는 JVM_BIND 오류가 발생할 때마다 가장 좋아하는 앱입니다.어떤 프로세스가 어떤 포트로 리슨 중인지 표시됩니다.또한 프로세스를 종료하거나 방해가 되는 연결을 닫을 수 있는 편리한 컨텍스트 메뉴도 제공합니다.
창가
netstat -ano
는 수신 중인 모든 프로토콜, 포트 및 프로세스를 나열합니다.사용하다
taskkill -pid "proces to kill" /f
포트 리슨 프로세스를 종료합니다(예:
taskkill -pid 431 /f
Ubuntu/Unix에서는 이 문제를 다음 2단계로 해결할 수 있습니다.
「」라고 입력합니다.
netstat -plten |grep java
이것에 의해, 다음과 같은 출력이 됩니다.
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1001 76084 9488/java
서 ★★★★
8080
하고 있는 와 Java가 리슨하고 있는 포트 번호입니다.9488
아이디(pid)가 되다.포트를 는 이 .
kill
명령어를 입력합니다.kill -9 9488
9488
아이디.는 용용 we we we we we we we we we-9
프로세스를 강제로 중지합니다.
이것으로, 포토가 사용 가능하게 되어, 서버를 재기동할 수 있게 됩니다.
Mac의 경우:
Kill 프로세스 터미널:kill <pid>
pid 찾기:터미널:lsof -i:<port>
Diego Pino에서
(Windows만)
프로세스를 종료하려면 먼저 프로세스 ID(pid)를 찾아야 합니다.
다음 명령을 실행합니다.
netstat -ano | findstr :yourPortNumber
프로세스 ID(PID)가 표시됩니다.지금 동일한 프로세스를 종료하려면 다음 명령을 실행합니다.
taskkill /pid yourid /f
Windows의 경우:
프로세스 ID 검색
netstat - nao | "8080" 검색
프로세스 ID가 숫자로 표시됩니다.
예:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18856
여기 18856은 프로세스 ID입니다.
프로세스를 종료하다
태스크킬 / PID 18856 / F
출력 : SUCCESS : PID 18856의 프로세스가 종료되었습니다.
여기서는 taskkill을 사용하여 프로세스 ID:18856을 종료합니다.
Linux/Mac의 경우:
sudo kill -9 $(sudo lsof -t -i:8080)
여기에서는 포트 8080에 의한 프로세스를 확인할 수 있습니다.sudo lsof -t -i:8080
죽이기 .
동일한 포트에서 다른 프로세스가 실행되고 있습니다.
태스크 매니저에서 실행 중인 java.exe 서비스 중 하나를 종료해 볼 수 있습니다.ps는 java.exe로도 표시되어 있기 때문에 이클립스를 종료하지 않도록 합니다.다른 방법이 없을 경우 컴퓨터를 재부팅하면 문제가 해결됩니다.이전 테스트에서 소켓을 셧다운하지 않은 것 같습니다.이게 도움이 됐으면 좋겠다.
가장 심플한 답을 찾고 있는 분(보통 놓치는 경우가 많으므로)은 실행 중인 프로젝트를 중지하고 다시 시작하십시오.대부분의 경우 이전에 실행했던 프로젝트를 중지하는 것을 잊어버리고 프로젝트를 재실행하면 이러한 문제가 나타납니다.
더 선명하게 하기 위해 사진을 첨부합니다('스프링 공구 세트'를 사용하고 있습니다.따라서 같은 프로젝트를 다시 시작하려면 오른쪽 끝에 있는 버튼을 클릭하거나 오른쪽에서 두 번째 버튼을 클릭하여 프로젝트를 중지하고 왼쪽 끝에 있는 버튼을 클릭하여 프로젝트를 실행해야 합니다.나는 이것이 소수의 새로운 프로그래머들의 문제를 해결해 주길 바란다.:)
Windows CMD 행에서 다음 명령을 입력하여 바인드 포트에서 연결을 유지하는 프로세스 ID를 찾습니다.
C:> netstat -a -o
-a 모든 연결 표시
o 프로세스 식별자를 표시합니다.
그런 다음 프로세스를 종료합니다.
Linux 사용자인 경우 포트를 닫은 후
fuser -k 8080/tcp
이 BindException은 지정된 포트(8080)에서 다른 프로세스가 이미 실행 중일 때 발생합니다.
다음과 같은 방법을 사용할 수 있습니다.
또는
- Tomcat > conf 폴더로 이동합니다.
- server.xml 편집
- "커넥터 포트" 검색
- 포트 번호로 "8080"을 바꿉니다.
- Tomcat 서버를 재시작합니다.
- 해당 포트에서 실행 중인 기존 프로세스를 종료하고 서버를 시작합니다.
Linux/Mac의 경우
sudo kill -9 $(sudo lsof -t -i:8080)
Windows 의 경우
netstat -ano | findstr :8080 taskkill /PID typeyourPIDhere /F
주의: (/F는 프로세스를 강제로 종료합니다.)
처럼 다른 가 같은입니다. Ubuntu 명령어를 할 수 .sudo kill $(sudo lsof -t -i:[port number])
::sudo kill $(sudo lsof -t -i:8080)
하지만 한번은 안 먹히니까 내가 명령했어
$ lsof -i:[port]
아무것도 표시되지 않습니다.
명령을 사용하여 도커 컨테이너를 확인했습니다.docker ps -a
생존자는 없어요모든 컨테이너가 정지했습니다(단, 몇 분 전에 같은 포트를 사용하던 컨테이너 1개를 정지했습니다).도커가 원인이 아님을 확인하기 위해 명령을 사용하여 도커 프로세스 전체를 중지합니다.sudo service docker stop
다시 한 번 해보겠습니다.놀랍게도 일식은 그 당시 오류를 보여주지 않았다.제 프로그램이 완벽하게 작동돼요
내 경험이 누군가에게 도움이 되었으면 좋겠다.
@Diego Pino가 말한 것처럼 포트는 이미 다른 프로세스에서 사용되고 있습니다.즉, unix 상에서 lsof를 사용하여 프로세스의 모든 pid를 취득하고 모든 사용자가 취득한 포트를 검색하여 unix 상에서 각 pid를 삭제할 수 있습니다.
가능하면 머신을 재기동해 주세요:)
PC를 한번 재기동하면 될 것 같아요.내 경우엔 작동하기 시작했어태스크 매니저로 이동하여 프로세스를 종료할 수 있습니다.
내 경우 Tomcat은 백그라운드에서 실행되고 있었다.이클립스를 사용하면서 외장 서블릿으로 설치했습니다.Intelij의 Spring Boot에서는 자체 서버가 있지만 이미 사용 중인 상태에서는 시작할 수 없습니다.
Tomcat이 자동으로 부팅되는 경우 OS를 켜서 수동으로 종료해야 합니다.
$ sudo service tomcat stop
물론 사용하는 Tomcat 버전에 따라 "modcat"이 달라집니다.
누군가에게 도움이 되길 바랍니다.
이클립스에서도 서버 프로그램을 처음 시작할 때 두 개의 콘솔이 열렸고, 다음으로 클라이언트 프로그램이 열렸을 때 비슷한 문제에 직면했습니다.서버를 닫은 줄 알고 단일 콘솔에서 프로그램을 중지하곤 했는데, 서버가 닫히지 않고 클라이언트만 닫았습니다.작업 관리자에서 Java 프로세스를 실행하고 있습니다.이 문제는 서버 프로그램과 클라이언트 프로그램을 각각의 콘솔에서 닫음으로써 해결되었습니다(Eclipse는 최신 활성 프로그램의 콘솔을 표시합니다).그래서 서버 프로그램을 다시 시작했을 때 포트는 캡처하기 위해 다시 열려 있었습니다.
포트가 다른 프로세스에서 사용 중이어야 합니다.따라서 https://technet.microsoft.com/en-us/sysinternals/bb897437에서 TCP View를 다운로드하여 사용한 포트의 프로세스를 종료할 수 있습니다.
포트를 모를 경우 부팅되지 않는 서버를 더블 클릭하고 서버 속성 페이지를 클릭한 후 왼쪽 열에서 glassfish를 클릭합니다.포트는 여기에 있습니다.
(1) 포트가 사용 중인지 확인하고 해당 프로세스를 종료합니다.
$ lsof - i:[포트]
(2) 다른 이유는 ipv6에서 포트가 사용되고 있기 때문입니다.솔루션:
/etc/sysctl.conf 편집
이것을 파일에 추가하다
net.disable6.conf.all.disable_disable6 = 1
그러면 효과가 생긴다.
$sudo sysctl - p /etc/sysctl.conf
또는 재기동만 하면 됩니다.
이는 다른 프로세스가 이미 포트를 사용하고 있음을 의미합니다.이 포트가 다른 중요한 응용 프로그램에서 사용되고 있고 해당 응용 프로그램을 닫지 않으려면 사용 가능한 다른 포트를 선택하는 것이 좋습니다.
사용 가능한 다른 포트를 사용하도록 응용 프로그램을 설정하면 응용 프로그램이 작동하는 것을 볼 수 있습니다.
모든 Java Process를 종료하고 앱을 다시 시작할 수 있습니다.
taskkill /F /IM java.exe
앱을 다시 시작합니다...
사실 Console 탭의 Terminate(종료) 버튼을 사용했습니다.그것은 작은 빨간 상자입니다.잘 되길 바라.
언급URL : https://stackoverflow.com/questions/12737293/how-do-i-resolve-the-java-net-bindexception-address-already-in-use-jvm-bind
'programing' 카테고리의 다른 글
GIS: PostGIS/PostgreSQL vs. MySql vs.SQL Server? (0) | 2022.09.06 |
---|---|
마리아에 대한 속편 오류DB (0) | 2022.09.06 |
SELECT 포함 삽입 (0) | 2022.09.06 |
ByteBuffer의 플립 방식의 목적은 무엇입니까? (그리고 왜 "플립"이라고 부릅니까?) (0) | 2022.09.06 |
Java에는 경로 결합 방식이 있습니까? (0) | 2022.09.06 |