Sepertinya saya tidak pernah membuat ini berfungsi di masa lalu. Saat ini, saya TAHU itu tidak berhasil.
Tapi kami memulai proses Java kami:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Saya dapat melakukan telnet ke port, dan "ada sesuatu di sana" (yaitu, jika saya tidak memulai proses, tidak ada jawaban, tetapi jika saya melakukannya, maka saya melakukannya), tetapi saya tidak dapat membuat JConsole berfungsi mengisi IP dan pelabuhan.
Sepertinya itu harus sangat sederhana, tetapi tidak ada kesalahan, tidak ada suara, tidak ada apa-apa. Tidak berhasil.
Adakah yang tahu tip panas untuk ini?
Jawaban:
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:
2. Tentukan satu Port gratis di mesin linux Anda:
Contoh:
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).Contoh:
4. Dapatkan Process-Id dari Proses Java Anda
Contoh:
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 yanglsof -i
memberi petunjuk port apa yang telah dibuka dari proses java.CATATAN: Porta ini selalu berubah saat proses java dimulai.
Contoh:
6. Aktifkan dua SSH-Tunnels dari mesin Windows Anda dengan dempul
Contoh:
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:
RMIServer-Stub-Port:
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.
Contoh:
9. NIKMATI # 8-]
sumber
Menambahkan
-Djava.rmi.server.hostname='<host ip>'
menyelesaikan masalah ini untuk saya.sumber
Mencoba dengan Java 8 dan versi yang lebih baru
Solusi ini bekerja dengan baik juga dengan firewall
1. Tambahkan ini ke skrip startup java Anda di host jarak jauh:
2. Jalankan ini di komputer Anda.
Pengguna Windows :
putty.exe -ssh user@remote-host -L 1616:remote-host:1616
Pengguna Linux dan Mac :
ssh user@remote-host -L 1616:remote-host:1616
3. Mulai
jconsole
di komputer Anda4. Selamat bersenang-senang!
PS: selama langkah 2, menggunakan
ssh
dan-L
Anda menentukan bahwa port 1616 pada host lokal (klien) harus diteruskan ke sisi jarak jauh. Ini adalah terowongan ssh dan membantu menghindari firewall atau berbagai masalah jaringan.sumber
Anda mungkin mengalami masalah dengan firewall. 'Masalah' adalah bahwa port yang Anda tentukan bukan satu-satunya port yang digunakan, ia menggunakan 1 atau mungkin bahkan 2 port lagi untuk RMI, dan port tersebut mungkin diblokir oleh firewall.
Salah satu port tambahan tidak akan diketahui sebelumnya jika Anda menggunakan konfigurasi RMI default, jadi Anda harus membuka sejumlah besar port - yang mungkin tidak akan menghibur administrator server.
Ada solusi yang tidak memerlukan membuka banyak port namun, saya telah membuatnya berfungsi menggunakan cuplikan sumber gabungan dan tip dari
http://forums.sun.com/thread.jspa?threadID=5267091- tautan tidak berfungsi lagihttp://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx
http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
Bahkan dimungkinkan untuk mengatur terowongan ssh dan tetap membuatnya berfungsi :-)
sumber
forums.sun.com
rusakblogs.oracle.com
rusak.Setelah menguji Google-fu saya selama beberapa hari terakhir, saya akhirnya bisa membuatnya berfungsi setelah mengumpulkan jawaban dari Stack Overflow dan halaman ini http://help.boomi.com/atomsphere/GUID-F787998C- 53C8-4662-AA06-8B1D32F9D55B.html .
Memposting ulang dari halaman Dell Boomi:
Satu baris yang saya belum melihat sampul jawaban Stack Overflow adalah
Dalam kasus saya, saya mencoba mengambil metrik Kakfa, jadi saya cukup mengubah opsi di atas untuk mencocokkan
-Dcom.sun.management.jmxremote.port
nilainya. Jadi, tanpa otentikasi apa pun, konfigurasi minimal akan terlihat seperti ini:sumber
Apakah Anda menggunakan Linux? Mungkin agen manajemen mengikat localhost:
http://java.sun.com/j2se/1.5.0/docs/guide/management/faq.html#linux1
sumber
Langkah 4-7 Sushicutta bisa dilewati dengan menambahkan baris berikut ke langkah 3:
misalnya Tambahkan untuk memulai parameter:
Untuk penerusan port, hubungkan menggunakan:
jika tuan rumah Anda adalah batu loncatan, cukup rantai port ke depan dengan menjalankan perintah berikut pada batu loncatan setelah di atas:
Perhatikan bahwa hostname = localhost diperlukan untuk memastikan jmxremote memberi tahu koneksi rmi untuk menggunakan terowongan. Jika tidak, itu mungkin mencoba untuk terhubung langsung dan menekan firewall.
sumber
ssh -L <JMX_port>:localhost:<JMX_port> <remote_user>@<remote_host>
di mesin lokal (3) Kemudian saya terhubung ke JMX jarak jauh menggunakan:jconsole <remote_host>:<JMX_port>
PROTIP:
Port RMI dibuka di portnr sewenang-wenang. Jika Anda memiliki firewall dan tidak ingin membuka port 1024-65535 (atau menggunakan vpn) maka Anda perlu melakukan hal berikut.
Anda perlu memperbaiki (seperti memiliki nomor yang diketahui) RMI Registry dan port JMX / RMI Server. Anda melakukan ini dengan meletakkan file jar (catalina-jmx-remote.jar ada di ekstra) di lib-dir dan mengkonfigurasi listener khusus di bawah server:
(Dan tentu saja, bendera biasa untuk mengaktifkan JMX
Lihat: JMX Remote Lifecycle Listener di http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html
Kemudian Anda dapat terhubung menggunakan URL yang mengerikan ini:
sumber
Periksa apakah server Anda berada di belakang firewall. JMX berbasis RMI, yang membuka dua port saat dimulai. Salah satunya adalah port register, defaultnya adalah 1099, dan dapat ditentukan dengan
com.sun.management.jmxremote.port
opsi. Yang lainnya untuk komunikasi data, dan acak, itulah yang menyebabkan masalah. Kabar baiknya adalah, dari JDK6, port acak ini dapat ditentukan dengancom.sun.management.jmxremote.rmi.port
opsi.sumber
Mendapatkan JMX melalui Firewall sangat sulit. Masalahnya adalah bahwa RMI standar menggunakan port yang ditetapkan secara acak kedua (di samping registri RMI).
Kami memiliki tiga solusi yang berhasil, tetapi setiap kasus membutuhkan solusi yang berbeda:
JMX melalui SSH Tunnel dengan proxy Socks, menggunakan RMI standar dengan sihir SSH http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html
JMX MP (alternatif untuk RMI standar), hanya menggunakan satu port tetap, tetapi membutuhkan jar khusus di server dan klien http://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/
Mulai kode formulir Server JMX, di sana dimungkinkan untuk menggunakan RMI standar dan menggunakan port kedua tetap: https://issues.apache.org/bugzilla/show_bug.cgi?id=39055
sumber
Saat menguji / men-debug / mendiagnosis masalah JMX jarak jauh , pertama-tama selalu coba sambungkan pada host yang sama yang berisi MBeanServer (yaitu localhost), untuk menyingkirkan masalah khusus jaringan dan non-JMX lainnya.
sumber
Sudah ada beberapa jawaban bagus di sini, tetapi, ada pendekatan yang sedikit lebih sederhana yang menurut saya layak untuk dibagikan.
Pendekatan sushicutta bagus, tetapi sangat manual karena Anda harus mendapatkan Port RMI setiap saat. Untungnya, kami dapat mengatasinya dengan menggunakan proxy SOCKS daripada secara eksplisit membuka terowongan port. Kelemahan dari pendekatan ini adalah aplikasi JMX yang Anda jalankan di mesin Anda harus dapat dikonfigurasi untuk menggunakan Proxy. Sebagian besar proses dapat Anda lakukan dari menambahkan properti java, tetapi, beberapa aplikasi tidak mendukungnya.
Langkah:
Tambahkan opsi JMX ke skrip startup untuk layanan Java jarak jauh Anda:
Siapkan koneksi proxy SOCKS ke mesin jarak jauh Anda:
Konfigurasikan aplikasi pemantauan Java lokal Anda untuk menggunakan proxy SOCKS (localhost: 9696). Catatan: Terkadang Anda dapat melakukan ini dari baris perintah, yaitu:
sumber
Yang berikut ini berhasil untuk saya (meskipun menurut saya port 2101 tidak benar-benar berkontribusi untuk ini):
Saya menghubungkan dari mesin jarak jauh ke server yang menjalankan Docker dan prosesnya ada di dalam wadah. Juga, saya menghentikan firewallD tetapi saya tidak berpikir itu masalahnya karena saya dapat melakukan telnet ke 2100 bahkan dengan firewall terbuka. Semoga membantu.
sumber
Saya menjalankan JConsole / JVisualVm di windows yang menghubungkan ke tomcat yang menjalankan Linux Redhat ES3.
Menonaktifkan pemfilteran paket menggunakan perintah berikut melakukan trik untuk saya:
di mana jconsole-host adalah nama host atau alamat host tempat JConsole berjalan dan jmxremote-port adalah nomor port yang disetel untuk com.sun.management.jmxremote.port untuk manajemen jarak jauh.
sumber
Saya menggunakan boot2docker untuk menjalankan kontainer buruh pelabuhan dengan Tomcat di dalamnya dan saya mendapat masalah yang sama, solusinya adalah:
-Djava.rmi.server.hostname=192.168.59.103
docker run ... -p 9999:9999 ...
. Menggunakan port yang berbeda tidak berfungsi.sumber
Anda juga perlu memastikan bahwa nama mesin Anda ditetapkan ke IP yang mengikat JMX; BUKAN localhost atau 127.0.0.1. Bagi saya, ini membantu memasukkan entri ke host yang secara eksplisit mendefinisikan ini.
sumber
Mendapatkan JMX melalui firewall sama sekali tidak sulit. Ada satu tangkapan kecil. Anda harus meneruskan kedua port yang dikonfigurasi JMX yaitu. 9010 dan salah satu port dinamis yang didengarkannya di mesin saya adalah> 30000
sumber
Ini adalah langkah-langkah yang berhasil untuk saya (debian di belakang firewall di sisi server, dicapai melalui VPN dari Mac lokal saya):
periksa ip server
gunakan parameter JVM:
menjalankan aplikasi
temukan pid dari proses java yang sedang berjalan
periksa semua port yang digunakan oleh JMX / RMI
buka semua port dari langkah 5 di firewall
Voila.
sumber
Untuk memberikan kontribusi, inilah yang saya lakukan di CentOS 6.4 untuk Tomcat 6.
Matikan layanan iptables
Tambahkan baris berikut ke tomcat6.conf
Dengan cara ini saya dapat terhubung dari PC lain menggunakan JConsole.
sumber
Saya mencoba JMC untuk menjalankan Flight Recorder (JFR) untuk membuat profil NiFi di server jarak jauh yang tidak menawarkan lingkungan grafis untuk menjalankan JMC.
Berdasarkan jawaban lain yang diberikan di sini, dan setelah banyak trial and error, inilah yang saya berikan ke JVM ( conf / bootstrap.conf ) ketika saya meluncurkan NiFi:
Saya memang meletakkan ini di / etc / hosts , meskipun saya ragu itu diperlukan:
Kemudian, setelah meluncurkan JMC, saya membuat koneksi jarak jauh dengan properti ini:
Kebetulan, jika saya mengklik URL layanan JMX Kustom, saya melihat:
Ini akhirnya berhasil untuk saya.
sumber