Adakah yang pernah mendapatkan JMX JConsole jarak jauh untuk bekerja?

120

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?

Will Hartung
sumber
3
Jika Anda menggunakan kucing jantan ini mungkin solusinya: stackoverflow.com/questions/1263991/…
Hajo Thelen
5
Apakah Anda lupa menerima sesuatu di sini @Will?
Gray

Jawaban:

126

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=localhostargumen).

-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 -lpport ini dapat ditemukan juga yang lsof -imemberi 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


Pengaturan untuk membuka terowongan SSL melalui Putty


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


Terhubung melalui url layanan jmx


9. NIKMATI # 8-]

sushicutta
sumber
1
Hanya sedikit pertanyaan di sini - tidak mungkin melakukan koneksi JMX tanpa rmi?
Kumar Vaibhav
5
Saya mendapat petunjuk, bahwa kita dapat mengatur rmi.port ke nomor port tetap, jadi kita dapat mengatur port arbitrer untuk unduhan rintisan RMIServer. ini harus bekerja dengan properti Java "com.sun.management.jmxremote.rmi.port = <rmi-server-port>". Sepertinya fitur tidak terdokumentasi di Oracle Java VM.
sushicutta
1
Tentu mengalahkan harus mengatur keystore dan toko tepercaya
TekiusFanatikus
Proses yang sama, tetapi saya tidak mendapatkan objek seperti itu di tabel
wener
2
@sushicutta dapatkah Anda menambahkan petunjuk ini di jawaban Anda, ini berfungsi dengan baik, dan dapat menghapus langkah-langkah dari 4 hingga 6, tangkapannya adalah bahwa port yang diteruskan Anda harus sama dengan port asli dan baik port jmx dan rmi juga harus menjadi sama
lusuh
80

Menambahkan -Djava.rmi.server.hostname='<host ip>'menyelesaikan masalah ini untuk saya.

masa
sumber
2
Dalam kasus saya, saya harus menambahkan alamat ip (-Djava.rmi.server.hostname = <ip>). nama host -saya memberi saya dua alamat ip dan yang benar adalah yang kedua dalam daftar.
Georgy Bolyuba
4
tidak menyelesaikan masalah untuk saya. menghubungkan windows-2-windows bukan masalah bagi saya TETAPI ketika saya mencoba menghubungkan dari JVM Jvisualvm.exe di Windows untuk memantau layanan java yang berjalan di SUSE dengan Oracle JDK 1.6.024, koneksi gagal. Untuk alasan ini saya pikir pertanyaan orang ini masih belum terjawab.
djangofan
Ini memecahkan masalah saya. Ini ditambah set 3 (otentikasi / port / ssl) biasa dan saya dapat terhubung dari jarak jauh sekarang. Kotak ini mendengarkan pada beberapa antarmuka virtual, mungkin mengapa tidak menentukan host membingungkan jvm.
Nicholi
Akhirnya memecahkan masalah saya menghubungkan jconsole di laptop osx saya. Terima kasih.
rado
Bekerja untuk saya. Terima kasih!
Jeff
58

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:

-Dcom.sun.management.jmxremote.port=1616
-Dcom.sun.management.jmxremote.rmi.port=1616
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

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 jconsoledi komputer Anda

jconsole localhost:1616

4. Selamat bersenang-senang!

PS: selama langkah 2, menggunakan sshdan -LAnda 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.

freedev
sumber
1
LUAR BIASA !! Telah mencoba selama 6 jam lebih sekarang untuk jmx-remote ke instance ActiveMQ di java8. AKHIRNYA SESUATU YANG BERHASIL !! Terima kasih! :)
Rop
Terima kasih, seperti Anda, saya juga berjuang selama sekitar satu hari, dan setelah begitu banyak pekerjaan saya hanya berpikir: "Saya harus menulis hal ini kepada SO !!"
freedev
2
Benar-benar menyebalkan bahwa Oracle tidak menyebutkan "com.sun.management.jmxremote.rmi.port", "java.rmi.server.hostname" docs.oracle.com/javase/8/docs/technotes/guides/management/ ... Saya tebak itu masalah saya.
Rop
Sebab, AFAIK, masalah ini bukan tentang JMX, melainkan bagaimana RMI bekerja. Misalnya, setelah kasus ini, saya memiliki masalah yang sama dengan jmeter, yang menggunakan rmi dalam implementasi klien / servernya.
freedev
2
Berhasil. Hanya menambahkan pengalaman saya dengan terowongan: 1) dapat menggunakan "localhost" di "-L 1616: localhost: 1616" 2) tidak dapat mengubah port sumber, yaitu ini tidak akan berfungsi: "-L 9999: localhost: 1616"
gargii
19

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 lagi

http://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 :-)

Simon Groenewolt
sumber
2
Saya dapat mengatasi firewall hanya dengan menggunakan alias yang dijelaskan di simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html bersama dengan pengaturan -Djava.rmi.server.hostname seperti yang disebutkan dalam jawaban lain di sini.
Damien
Catatan untuk pembaca selanjutnya: tautan ke forums.sun.comrusak
CDspace
1
Catatan untuk pembaca selanjutnya: tautan ke blogs.oracle.comrusak.
Grimlock
17

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:

To Enable Remote JMX on an Atom

If you want to monitor the status of an Atom, you need to turn on Remote JMX (Java Management Extensions) for the Atom.

Use a text editor to open the <atom_installation_directory>\bin\atom.vmoptions file.

Add the following lines to the file:

-Dcom.sun.management.jmxremote.port=5002
-Dcom.sun.management.jmxremote.rmi.port=5002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Satu baris yang saya belum melihat sampul jawaban Stack Overflow adalah

-Dcom.sun.management.jmxremote.rmi.port=5002

Dalam kasus saya, saya mencoba mengambil metrik Kakfa, jadi saya cukup mengubah opsi di atas untuk mencocokkan -Dcom.sun.management.jmxremote.portnilainya. Jadi, tanpa otentikasi apa pun, konfigurasi minimal akan terlihat seperti ini:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=(jmx remote port)

-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=(jmx remote port)
-Djava.rmi.server.hostname=(CNAME|IP Address)
Sergio
sumber
1
Ditambah satu untuk "Google-fu"
kevinarpe
"com.sun.management.jmxremote.rmi.port" juga merupakan kunci bagi saya. Lihat juga jawaban ini: stackoverflow.com/a/22306586/123205
David
Saya tidak membutuhkan "com.sun.management.jmxremote.local.only" jadi menurut saya konfigurasi Anda tidak benar-benar "minimal"
David
7

Langkah 4-7 Sushicutta bisa dilewati dengan menambahkan baris berikut ke langkah 3:

-Dcom.sun.management.jmxremote.rmi.port=<same port as jmx-remote-port>

misalnya Tambahkan untuk memulai parameter:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.rmi.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

Untuk penerusan port, hubungkan menggunakan:

ssh -L 12345:localhost:12345 <username>@<host>

jika tuan rumah Anda adalah batu loncatan, cukup rantai port ke depan dengan menjalankan perintah berikut pada batu loncatan setelah di atas:

ssh -L 12345:localhost:12345 <username>@<host2>

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.

pengguna2412906
sumber
Metode ini membantu saya: (1) Saya menambahkan parameter JMX yang terlewat dan memulai ulang aplikasi (2) Kemudian menjalankan 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>
Rib47
6

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:

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
      rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

(Dan tentu saja, bendera biasa untuk mengaktifkan JMX

    -Dcom.sun.management.jmxremote  \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Djava.rmi.server.hostname=<HOSTNAME> \

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:

service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi
supdog
sumber
Mencoba di atas dengan jar ekstra, dan dapat melihat port RMI mendengarkan sebagaimana ditentukan, tetapi port acak masih digunakan oleh RMI setelah menghubungkan ke port JVM dengan VisualVM. Solusi: perhatikan port dengan 'lsof -i' dan buka port dengan koneksi yang diblokir.
Joseph Lust
5

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.portopsi. Yang lainnya untuk komunikasi data, dan acak, itulah yang menyebabkan masalah. Kabar baiknya adalah, dari JDK6, port acak ini dapat ditentukan dengan com.sun.management.jmxremote.rmi.portopsi.

export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.rmi.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
arganzheng
sumber
4

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:

  1. JMX melalui SSH Tunnel dengan proxy Socks, menggunakan RMI standar dengan sihir SSH http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html

  2. 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/

  3. 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

pengguna85155
sumber
Semua jawaban lain harus menjadi tambahan untuk yang satu ini
ruruskyi
2

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.

eljenso
sumber
2

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:

  1. Tambahkan opsi JMX ke skrip startup untuk layanan Java jarak jauh Anda:

    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=8090
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    
  2. Siapkan koneksi proxy SOCKS ke mesin jarak jauh Anda:

    ssh -D 9696 [email protected]
    
  3. Konfigurasikan aplikasi pemantauan Java lokal Anda untuk menggunakan proxy SOCKS (localhost: 9696). Catatan: Terkadang Anda dapat melakukan ini dari baris perintah, yaitu:

    jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=9696
    
RichS
sumber
2

Yang berikut ini berhasil untuk saya (meskipun menurut saya port 2101 tidak benar-benar berkontribusi untuk ini):

-Dcom.sun.management.jmxremote.port=2100
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=2101
-Djava.rmi.server.hostname=<IP_ADDRESS>OR<HOSTNAME>

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.

Dan saya.
sumber
1

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:

/usr/sbin/iptables -I INPUT -s jconsole-host -p tcp --destination-port jmxremote-port -j ACCEPT

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.

kishore
sumber
2
tidak berfungsi untuk saya pada instans SUSE Amazon EC2. Saya pikir masalahnya ada di tempat lain.
djangofan
1

Saya menggunakan boot2docker untuk menjalankan kontainer buruh pelabuhan dengan Tomcat di dalamnya dan saya mendapat masalah yang sama, solusinya adalah:

  • Menambahkan -Djava.rmi.server.hostname=192.168.59.103
  • Menggunakan port JMX yang sama di host dan buruh pelabuhan kontainer, misalnya: docker run ... -p 9999:9999 .... Menggunakan port yang berbeda tidak berfungsi.
smallo
sumber
0

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.

Joseph
sumber
0

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

Lukasz
sumber
0

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

hostname -i

gunakan parameter JVM:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=[jmx port]
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=[server ip from step 1]

menjalankan aplikasi

temukan pid dari proses java yang sedang berjalan

periksa semua port yang digunakan oleh JMX / RMI

netstat -lp | grep [pid from step 4]

buka semua port dari langkah 5 di firewall

Voila.

Mariusz
sumber
0

Untuk memberikan kontribusi, inilah yang saya lakukan di CentOS 6.4 untuk Tomcat 6.

  1. Matikan layanan iptables

    service iptables stop
    
  2. Tambahkan baris berikut ke tomcat6.conf

    CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8085 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=[host_ip]"
    

Dengan cara ini saya dapat terhubung dari PC lain menggunakan JConsole.

Andrés S.
sumber
0

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:

java.arg.90=-Dcom.sun.management.jmxremote=true
java.arg.91=-Dcom.sun.management.jmxremote.port=9098
java.arg.92=-Dcom.sun.management.jmxremote.rmi.port=9098
java.arg.93=-Dcom.sun.management.jmxremote.authenticate=false
java.arg.94=-Dcom.sun.management.jmxremote.ssl=false
java.arg.95=-Dcom.sun.management.jmxremote.local.only=false
java.arg.96=-Djava.rmi.server.hostname=10.10.10.92  (the IP address of my server running NiFi)

Saya memang meletakkan ini di / etc / hosts , meskipun saya ragu itu diperlukan:

10.10.10.92   localhost

Kemudian, setelah meluncurkan JMC, saya membuat koneksi jarak jauh dengan properti ini:

Host: 10.10.10.92
Port: 9098
User: (nothing)
Password: (ibid)

Kebetulan, jika saya mengklik URL layanan JMX Kustom, saya melihat:

service:jmx:rmi:///jndi/rmi://10.10.10.92:9098/jmxrmi

Ini akhirnya berhasil untuk saya.

Russ Bateman
sumber