원격 호스트에서 실행중인 Java 응용 프로그램에 jdb 디버그 세션을 연결해야하지만 수행 할 수 없습니다. Openjdk 1.8.0_65, 64 비트 서버 VM을 사용하여 Linux에서 작업하고 있습니다.jdb를 사용하여 프로세스에 연결하려고 할 때의 문제점
-Xdebug -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:8000,server=y,suspend=n
다음과 같은 메시지가 콘솔에 표시됩니다 : 나는 포트 청취를 가능하게하기 위해
을 시도 무엇
, 나는 명령 줄에 다음 인수를 추가하는 자바 응용 프로그램을 실행 한 :
Listening for transport dt_socket at address: 8000
그리고 응용 프로그램이 정상적으로 실행됩니다.
실패> jdb -connect com.sun.jdi.SocketAttach:hostname=<remote_host>,port=8000
출력은 :
그런 다음, 원격 호스트로부터, I는 다음의 명령을 실행
I를 확인하기 위해서 체크 것을java.net.ConnectException: Conexión rehusada
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
[...]
Fatal error:
Unable to attach to target VM.
포트가 실제로 열려 있고 원격 호스트에서 연결할 수있는 경우 다음 작업을 수행했습니다.
Java 응용 프로그램을 실행중인 호스트를 호출 할 수 있습니다. hostA
하고 나는 jdb
hostB
를 연결 완있는 사람 :
> netstat -tualpn | grep :8000
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 1399/<app_name>
호스트 A에서 포트 8000에서 수신 대기 소켓이 있음을
확인, 그 I를 확인 포트 8000에 연결할 수 있습니다 0,123,971,685,646으로
> nc -vz localhost 8000
nc: connect to localhost port 8000 (tcp) failed: Connection refused
Connection to localhost 8000 port [tcp/irdmi] succeeded!
을 (즉, 로컬 호스트에서 연결을 시도), 그것은 연결할 수있는 것 같지만 연결이 JVM이 일종의 요청을 기대하고 있기 때문에 아마 stablished되는 즉시 닫힙니다?
> telnet localhost 8000
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
자바 응용 프로그램입니다. hostB의에서
Debugger failed to attach: timeout during handshak
, 내가 호스트 A에 연결할 수 있는지 확인 텔넷으로 8000
> nc -vz hostA 8000
nc: connect to hostA port 8000 (tcp) failed: Connection refused
포트 : 그래서
> telnet hostA 8000
Trying 172.17.10.127...
telnet: connect to address 172.17.10.127: Connection refused
텔넷 연결이 닫힌 다음과 같은 메시지를 표시합니다 , 포트 8000을 통해 hostA
에서 hostB
으로 연결할 수 없습니다. JVM은 포트 8000에서 01에서 청취하고 있지만.
위와 같이 실패했기 때문에 방화벽에서 연결이 거부되고 있는지 확인했습니다.
hostA
에서 :
# First kill the java app (otherwise the port is busy), then:
> nc -l 8000
hostB
에서 :
> nc -vz <hostA> 8000
Connection to hostA 8000 port [tcp/irdmi] succeeded!
는 지금까지 내가 이해, 위에서 방화벽이없는 것을 의미한다 (필자는 노스 캐롤라이나 명령을 사용하여 수행 한 또는 이와 동등한) 포트를 차단합니다. 물론
편집
, 나는 jdb -attach
할 시도했지만 그것도 hostA
에서 그 일을 실패합니다.
당신이 연결 시도 되세요 같은 컴퓨터에서 가져 왔어? –
예, "hostA에서 8000 포트에 연결할 수 있는지 확인하십시오"라고 표시됩니다. – Dan
입니다. 나는 nc 명령에 익숙하지 않다. hostA에서'nc -vz localhost 8000'이 어떻게 실패하고 성공할 수 있습니까? –