Saya punya solusi untuk ini:
Jika proses Java Anda berjalan di Linux di belakang firewall dan Anda ingin memulai JConsole / Java VisualVM / Java Mission Control pada Windows di komputer lokal Anda untuk menghubungkannya ke Port JMX dari proses Java Anda .
Anda memerlukan akses ke mesin linux Anda melalui login SSH. Semua Komunikasi akan disalurkan melalui koneksi SSH.
TIP: Solusi ini berfungsi tidak peduli apakah ada firewall atau tidak.
Kerugian: Setiap kali Anda me - restart proses java Anda, Anda perlu melakukan semua langkah dari 4 - 9 lagi.
1. Anda memerlukan putty-suite untuk mesin Windows Anda dari sini:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Setidaknya putty.exe
2. Tentukan satu Port gratis di mesin linux Anda:
<jmx-remote-port>
Contoh:
jmx-remote-port = 15666
3. Tambahkan argumen ke proses java di mesin linux
Ini harus dilakukan persis seperti ini. Jika dilakukan seperti di bawah ini, ini berfungsi untuk Mesin linux di belakang firewall (Berhasil karena -Djava.rmi.server.hostname=localhost
argumen).
-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
Contoh:
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. Dapatkan Process-Id dari Proses Java Anda
ps -ef | grep <java-processname>
result ---> <process-id>
Contoh:
ps -ef | grep ch.sushicutta.jmxremote.Main
result ---> 24321
5. Temukan Port sewenang-wenang untuk mengunduh rintisan RMIServer
Proses java membuka Port TCP baru di mesin linux, di mana RMI Server-Stubs akan tersedia untuk diunduh. Porta ini juga harus tersedia melalui SSH Tunnel untuk mendapatkan koneksi ke Mesin Virtual Java.
Dengan netstat -lp
port ini dapat ditemukan juga yang lsof -i
memberi petunjuk port apa yang telah dibuka dari proses java.
CATATAN: Porta ini selalu berubah saat proses java dimulai.
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>
Contoh:
netstat -lp | grep 24321
tcp 0 0 *:15666 *:* LISTEN 24321/java
tcp 0 0 *:37123 *:* LISTEN 24321/java
result ---> 37123
6. Aktifkan dua SSH-Tunnels dari mesin Windows Anda dengan dempul
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
Contoh:
Source port: 15666
Destination: localhost:15666
[x] Local
[x] Auto
Source port: 37123
Destination: localhost:37123
[x] Local
[x] Auto
7. Login ke mesin Linux Anda dengan Putty dengan SSH-Tunnel diaktifkan.
Biarkan sesi dempul terbuka.
Saat Anda login, Putty akan melakukan tunnel semua TCP-Connections ke mesin linux melalui SSH port 22.
JMX-Port:
Windows machine: localhost:15666 >>> SSH >>> linux machine: localhost:15666
RMIServer-Stub-Port:
Windows Machine: localhost:37123 >>> SSH >>> linux machine: localhost:37123
8. Jalankan JConsole / Java VisualVM / Java Mission Control untuk menyambung ke Proses Java Anda menggunakan URL berikut
Ini berfungsi, karena JConsole / Java VisualVM / Java Mission Control mengira Anda terhubung ke Port di mesin Windows lokal Anda. tetapi Putty mengirim semua payload ke port 15666 ke mesin linux Anda.
Pada mesin linux terlebih dahulu proses java memberikan jawaban dan mengirimkan kembali Port RMIServer. Dalam contoh ini 37123.
Kemudian JConsole / Java VisualVM / Java Mission Control mengira itu terhubung ke localhost: 37123 dan putty akan mengirim seluruh muatan ke depan ke mesin linux
Proses java menjawab dan koneksi terbuka.
[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:<jndi-remote-port>/jmxrmi
Contoh:
[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi
9. NIKMATI # 8-]