이에 대한 해결책이 있습니다.
귀하의 경우 자바 프로세스는 방화벽 뒤에 리눅스에서 실행 하면 시작하려는 JConsole의 / 자바 VisualVM과 / 자바 미션 컨트롤 에 연결하려면 로컬 컴퓨터에 Windows의를 자바 프로세스의 JMX 포트 .
SSH 로그인을 통해 Linux 시스템에 액세스해야합니다. 모든 통신은 SSH 연결을 통해 터널링됩니다.
팁 : 이 솔루션은 방화벽이 있는지 여부에 관계없이 작동합니다.
단점 : Java 프로세스 를 다시 시작할 때 마다 4-9 단계의 모든 단계를 다시 수행해야합니다.
1. 여기에서 Windows 시스템 용 퍼티 스위트가 필요합니다.
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
적어도 putty.exe
2. Linux 시스템에서 하나의 사용 가능한 포트를 정의하십시오.
<jmx-remote-port>
예:
jmx-remote-port = 15666
3. 리눅스 머신의 자바 프로세스에 인수 추가
이것은 정확히 이와 같이 수행되어야합니다. 아래와 같이 수행되면 방화벽 뒤의 Linux 머신에서 작동합니다 ( -Djava.rmi.server.hostname=localhost
논쟁의 원인으로 작동합니다 ).
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<jmx-remote-port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost
예:
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost ch.sushicutta.jmxremote.Main
4. Java 프로세스의 Process-Id 가져 오기
ps -ef | grep <java-processname>
result ---> <process-id>
예:
ps -ef | grep ch.sushicutta.jmxremote.Main
result ---> 24321
5. RMIServer 스텁 다운로드를위한 임의의 포트 찾기
Java 프로세스는 Linux 시스템에서 새 TCP 포트를 엽니 다. 여기서 RMI 서버 스텁을 다운로드 할 수 있습니다. 이 포트는 또한 Java Virtual Machine에 연결하기 위해 SSH 터널을 통해 사용할 수 있어야합니다.
으로 netstat -lp
이 포트는 찾을 수는 lsof -i
Java 프로세스 형태로 개설되었습니다 어떤 포트 힌트를 제공합니다.
참고 :이 포트는 Java 프로세스가 시작될 때 항상 변경됩니다.
netstat -lp | grep <process-id>
tcp 0 0 *:<jmx-remote-port> *:* LISTEN 24321/java
tcp 0 0 *:<rmi-server-port> *:* LISTEN 24321/java
result ---> <rmi-server-port>
예:
netstat -lp | grep 24321
tcp 0 0 *:15666 *:* LISTEN 24321/java
tcp 0 0 *:37123 *:* LISTEN 24321/java
result ---> 37123
6. putty를 사용하여 Windows 시스템에서 두 개의 SSH 터널을 활성화합니다.
Source port: <jmx-remote-port>
Destination: localhost:<jmx-remote-port>
[x] Local
[x] Auto
Source port: <rmi-server-port>
Destination: localhost:<rmi-server-port>
[x] Local
[x] Auto
예:
Source port: 15666
Destination: localhost:15666
[x] Local
[x] Auto
Source port: 37123
Destination: localhost:37123
[x] Local
[x] Auto
7.이 SSH-Tunnel이 활성화 된 Putty로 Linux 시스템에 로그인합니다.
퍼티 세션을 열어 둡니다.
로그인하면 Putty는 SSH 포트 22를 통해 모든 TCP 연결을 Linux 시스템에 터널링합니다.
JMX 포트 :
Windows machine: localhost:15666 >>> SSH >>> linux machine: localhost:15666
RMIServer-Stub-Port :
Windows Machine: localhost:37123 >>> SSH >>> linux machine: localhost:37123
8. 다음 URL을 사용하여 JConsole / Java VisualVM / Java Mission Control을 시작하여 Java 프로세스에 연결합니다.
이것은 JConsole / Java VisualVM / Java Mission Control이 로컬 Windows 시스템의 포트에 연결한다고 생각하기 때문에 작동합니다. 그러나 Putty는 모든 페이로드를 Linux 시스템의 포트 15666으로 보냅니다.
리눅스 머신에서는 먼저 자바 프로세스가 응답을 제공하고 RMIServer 포트를 다시 보냅니다. 이 예에서는 37123입니다.
그런 다음 JConsole / Java VisualVM / Java Mission Control은 localhost : 37123에 연결되어 있다고 생각하고 putty는 전체 페이로드를 Linux 시스템으로 전송합니다.
자바 프로세스가 응답하고 연결이 열립니다.
[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:<jndi-remote-port>/jmxrmi
예:
[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi
9. 즐기기 # 8-]