Hiç kimse çalışmak için uzak bir JMX JConsole aldı mı?


120

Görünüşe göre bunu geçmişte hiç çalıştırmadım. Şu anda çalışmadığını BİLİYORUM.

Ancak Java sürecimizi başlatıyoruz:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Bağlantı noktasına telnet yapabiliyorum ve "orada bir şey var" (yani, işlemi başlatmazsam yanıt vermiyor, ancak yaparsam yanıt veriyor), ancak JConsole'un IP'yi doldurarak çalışmasını sağlayamıyorum ve liman.

Görünüşe göre çok basit olmalı, ama hata yok, gürültü yok, hiçbir şey yok. Sadece çalışmıyor.

Bunun için sıcak ipucunu bilen var mı?


3
Tomcat kullanıyorsanız çözüm bu olabilir: stackoverflow.com/questions/1263991/…
Hajo Thelen

5
@Will'de bir şeyi kabul etmeyi unuttunuz mu?
Gray

Yanıtlar:


126

Bunun için bir çözümüm var:

Senin Eğer Java işlemi bir güvenlik duvarının arkasında Linux üzerinde çalışan ve başlatmak istediğiniz JConsole / Java VisualVM / Java Görev Kontrol bağlamak için yerel makinenizde Windows üzerinde Java sürecinin JMX Limanı .

Linux makinenize SSH oturum açma yoluyla erişmeniz gerekir. Tüm İletişim SSH bağlantısı üzerinden tünel haline getirilecektir.

İPUCU: Bu Çözüm, bir güvenlik duvarı olup olmadığına bakılmaksızın çalışır.

Dezavantaj: Java işleminizi her yeniden başlattığınızda , 4 - 9 arasındaki tüm adımları tekrar yapmanız gerekecektir.


1. Windows makineniz için macun paketine buradan ihtiyacınız var:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

En azından putty.exe


2. Linux makinenizde boş bir Bağlantı Noktası tanımlayın:

<jmx-remote-port>

Misal:

jmx-remote-port = 15666      


3. Linux makinesinde java işlemine argümanlar ekleyin

Bu tam olarak böyle yapılmalıdır. Aşağıdaki gibi yapılırsa, güvenlik duvarlarının arkasındaki linux Makineleri için çalışır ( -Djava.rmi.server.hostname=localhostArgümanın nedeni olarak çalışır ).

-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

Misal:

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 İşleminizin İşlem Kimliğini Alın

ps -ef | grep <java-processname>

result ---> <process-id>

Misal:

ps -ef | grep ch.sushicutta.jmxremote.Main

result ---> 24321


5. RMIServer saplamaları indirmesi için rastgele Bağlantı Noktası bulun

Java işlemi, linux makinesinde, RMI Server-Stub'larının indirilebileceği yeni bir TCP Portu açar. Java Sanal Makinesi ile bağlantı kurmak için bu bağlantı noktasının SSH Tüneli aracılığıyla da kullanılabilir olması gerekir.

İle netstat -lpbu liman da bulunabilir lsof -ijava süreci formu açılmıştır hangi bağlantı noktasını ipuçları verir.

NOT: Bu bağlantı noktası, java işlemi başladığında her zaman değişir.

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>

Misal:

netstat -lp | grep 24321

tcp        0      0 *:15666     *:*     LISTEN      24321/java
tcp        0      0 *:37123     *:*     LISTEN      24321/java


result ---> 37123


6. Windows makinenizden macun kullanarak iki SSH-Tüneli etkinleştirin

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

Misal:

Source port: 15666
Destination: localhost:15666
[x] Local       
[x] Auto       

Source port: 37123
Destination: localhost:37123
[x] Local       
[x] Auto


Putty aracılığıyla bir SSL tüneli açma ayarları


7. Bu SSH-Tunnel etkinken Putty ile Linux makinenize giriş yapın.

Macun seansını açık bırakın.

Giriş yaptığınızda Putty, tüm TCP Bağlantılarını SSH port 22 üzerinden linux makinesine tünelleyecektir.

JMX Liman:

Windows machine: localhost:15666   >>> SSH >>>   linux machine: localhost:15666

RMIServer-Koçan-Liman:

Windows Machine: localhost:37123   >>> SSH >>>   linux machine: localhost:37123


8. Aşağıdaki URL'yi kullanarak Java İşleminize bağlanmak için JConsole / Java VisualVM / Java Mission Control'u başlatın

Bu çalışır, çünkü JConsole / Java VisualVM / Java Mission Control, yerel Windows makinenizdeki bir Bağlantı Noktasına bağlandığınızı düşünür. ancak Putty, tüm yükü 15666 numaralı bağlantı noktasına linux makinenize gönderir.

Linux makinesinde önce java işlemi yanıt verir ve RMIServer Portunu geri gönderir. Bu örnekte 37123.

Sonra JConsole / Java VisualVM / Java Mission Control, localhost: 37123'e bağlandığını düşünür ve putty tüm yükü linux makinesine iletir.

Java Süreci yanıt verir ve bağlantı açılır.

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:<jndi-remote-port>/jmxrmi

Misal:

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi


Jmx hizmet url ile bağlanın


9. KEYFİNİ ÇIKARIN # 8-]


1
Burada sadece küçük bir soru - rmi olmadan JMX bağlantısı yapmak mümkün değil mi?
Kumar Vaibhav

5
Bir rmi.port'u sabit bir bağlantı noktası numarasına ayarlayabileceğimize dair bir ipucum var, böylece RMIServer saplamaları indirmesi için isteğe bağlı bağlantı noktasını ayarlayabiliriz. bu Java özelliği "com.sun.management.jmxremote.rmi.port = <rmi-server-port>" ile çalışmalıdır. Oracle Java VM'de belgelenmemiş bir özellik gibi görünüyor.
sushicutta

1
Anahtar depoları ve güvenilir mağazalar kurmak zorunda kalmanın kesin ritmi
TekiusFanatikus

Aynı süreç, ama tablo böyle bir nesne var
Wener

2
@sushicutta bu ipucunu cevabınıza ekleyebilir misiniz, mükemmel bir şekilde çalışıyor ve 4'ten 6'ya kadar olan adımları kaldırabilirsiniz, asıl mesele, iletilen bağlantı noktanızın orijinal bağlantı noktasıyla aynı olması ve hem jmx hem de rmi bağlantı noktasının da aynı
perişan

80

Eklemek -Djava.rmi.server.hostname='<host ip>'bu sorunu benim için çözdü.


2
Benim durumumda ip adresi eklemem gerekiyor (-Djava.rmi.server.hostname = <ip>). hostname -i bana iki ip adresi verdi ve doğru olan listede ikinci oldu.
Georgy Bolyuba

4
sorunu benim için çözmedi. windows-2-windows'u bağlamak benim için sorun değil ANCAK Windows üzerinde bir JVM Jvisualvm.exe'den Oracle JDK 1.6.024 ile SUSE üzerinde çalışan bir java servisini izlemeye çalıştığımda bağlantı başarısız oluyor. Bu nedenle bu kişilerin sorusunun hala cevapsız kaldığını düşünüyorum.
djangofan

Bu benim için sorunu çözdü. Bu artı normal 3 (kimlik doğrulama / bağlantı noktası / ssl) seti ve şimdi uzaktan bağlanabiliyorum. Kutu birden çok sanal arabirimi dinliyor olsa da, ana bilgisayarın belirtilmesinin jvm'yi karıştırmasının nedeni olabilir.
Nicholi

Sonunda osx dizüstü bilgisayarıma jconsole bağlanma sorunlarımı çözdüm. Teşekkürler.
rado

Benim için çalıştı. Teşekkür ederim!
Jeff

58

Java 8 ve daha yeni sürümlerle denendi

Bu çözüm, güvenlik duvarlarıyla da iyi çalışıyor

1. Bunu uzak ana bilgisayardaki java başlangıç ​​betiğinize ekleyin:

-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. Bunu bilgisayarınızda yürütün.

  • Windows kullanıcıları :

    putty.exe -ssh user@remote-host -L 1616:remote-host:1616

  • Linux ve Mac Kullanıcıları :

    ssh user@remote-host -L 1616:remote-host:1616

3. jconsoleBilgisayarınızda başlayın

jconsole localhost:1616

4. İyi eğlenceler!

Not: 2. adımda, sshve kullanarak -Lyerel (istemci) ana bilgisayar üzerindeki 1616 numaralı bağlantı noktasının uzak tarafa iletilmesi gerektiğini belirtirsiniz. Bu bir ssh tünelidir ve güvenlik duvarlarını veya çeşitli ağ sorunlarını önlemeye yardımcı olur.


1
HARİKA !! Şimdi jmx-remote'ı java8 üzerinde bir ActiveMQ örneğine 6 saattir deniyorum. SONUNDA ÇALIŞAN BİR ŞEY !! Teşekkürler! :)
Rop

Teşekkürler, senin gibi ben de yaklaşık bir gün mücadele ettim ve bu kadar çok çalışmadan sonra düşündüm: "Bu şeyi SO'ya yazmalıyım !!"
freedev

2
Oracle'ın "com.sun.management.jmxremote.rmi.port", "java.rmi.server.hostname" docs.oracle.com/javase/8/docs/technotes/guides/management/… ' den bahsetmemesi gerçekten berbat. I Sanırım bu benim sorunumdu.
Rop

Çünkü AFAIK, bu sorun JMX ile ilgili değil, RMI'nin nasıl çalıştığı ile ilgili. Örneğin, bu durumdan sonra, istemci / sunucu uygulamasında rmi kullanan jmeter ile aynı problemi yaşadım.
freedev

2
İşe yarıyor. Tünellerle ilgili deneyimlerimi ekleyerek: 1) "-L 1616: localhost: 1616" içinde "localhost" kullanabilirim 2) kaynak bağlantı noktasını değiştiremez, yani bu işe yaramaz: "-L 9999: localhost: 1616"
gargii

19

Muhtemelen bir güvenlik duvarıyla ilgili bir sorun yaşıyorsunuz. 'Sorun', belirttiğiniz bağlantı noktasının kullanılan tek bağlantı noktası olmaması, RMI için 1 veya hatta 2 bağlantı noktası daha kullanması ve bunların muhtemelen bir güvenlik duvarı tarafından engellenmesidir.

Varsayılan RMI yapılandırmasını kullanıyorsanız, fazladan bağlantı noktalarından biri önceden bilinmeyecektir, bu nedenle çok sayıda bağlantı noktası açmanız gerekir - bu, sunucu yöneticisini eğlendirmeyebilir.

Çok fazla bağlantı noktası açmayı gerektirmeyen bir çözüm var, ancak birleşik kaynak parçacıkları ve ipuçlarını kullanarak çalışmasını sağladım.

http://forums.sun.com/thread.jspa?threadID=5267091 - bağlantı artık çalışmıyor

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

Hatta bir ssh tüneli kurup çalışmaya devam ettirmek bile mümkündür :-)


2
Burada başka bir yanıtta bahsedildiği gibi , sadece Simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html adresinde açıklanan takma adı ve -Djava.rmi.server.hostname ayarını kullanarak güvenlik duvarını aşabildim.
Damien

Gelecekteki okuyuculara not: bağlantı forums.sun.comkesildi
CDspace

1
Gelecekteki okuyuculara not: bağlantısı blogs.oracle.comkesildi.
Grimlock

17

Google-fu'umu son birkaç gün boyunca test ettikten sonra, Stack Overflow'dan ve bu sayfa http://help.boomi.com/atomsphere/GUID-F787998C-'den cevapları derledikten sonra nihayet bunu çalıştırmayı başardım. 53C8-4662-AA06-8B1D32F9D55B.html .

Dell Boomi sayfasından yeniden gönderme:

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

Stack Overflow cevap kapağını görmediğim tek satır

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

Benim durumumda, Kakfa ölçümlerini almaya çalışıyordum, bu yüzden yukarıdaki seçeneği -Dcom.sun.management.jmxremote.portdeğerle eşleşecek şekilde değiştirdim . Bu nedenle, herhangi bir kimlik doğrulama olmadan, minimum yapılandırma şu şekilde görünmelidir:

-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)

1
"Google-fu" için artı bir
kevinarpe

"com.sun.management.jmxremote.rmi.port" benim için de önemliydi. Bu yanıta da bakın: stackoverflow.com/a/22306586/123205
David,

"Com.sun.management.jmxremote.local.only" ye ihtiyacım yoktu bu yüzden yapılandırmanızın gerçekten "minimum" olduğunu düşünmüyorum
David


7

Sushicutta'nın 4-7. Adımları, 3. adıma aşağıdaki satırı ekleyerek atlanabilir:

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

örn. Başlangıç ​​parametrelerine ekle:

-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

Bağlantı noktası yönlendirme için şunu kullanarak bağlanın:

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

ev sahibiniz bir basamak taşı ise, yukarıdakilerden sonra basamak taşı üzerinde aşağıdakileri çalıştırarak bağlantı noktasını ileri doğru zincirleyin:

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

Jmxremote'un rmi bağlantısına tüneli kullanmasını söylediğinden emin olmak için hostname = localhost'un gerekli olduğunu unutmayın. Aksi takdirde, doğrudan bağlanmayı deneyebilir ve güvenlik duvarına çarpabilir.


Bu yöntem bana yardımcı oluyor: (1) Kaçırılan JMX parametrelerini ekliyorum ve uygulamayı yeniden ssh -L <JMX_port>:localhost:<JMX_port> <remote_user>@<remote_host>jconsole <remote_host>:<JMX_port>
başlatıyorum

6

PROTIP:

RMI bağlantı noktası isteğe bağlı bağlantı noktalarında açılır. Bir güvenlik duvarınız varsa ve 1024-65535 numaralı bağlantı noktalarını açmak istemiyorsanız (veya vpn kullanıyorsanız), aşağıdakileri yapmanız gerekir.

RMI Kayıt Defteri ve JMX / RMI Sunucusu bağlantı noktalarını (bilinen bir numaraya sahip olduğu gibi) düzeltmeniz gerekir. Bunu, lib-dizinine bir jar dosyası (catalina-jmx-remote.jar, fazlalıklardadır) koyarak ve sunucu altında özel bir dinleyici yapılandırarak yaparsınız:

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

(Ve tabii ki JMX'i etkinleştirmek için olağan bayraklar

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

Bkz: http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html adresindeki JMX Remote Lifecycle Listener

Ardından bu korkunç URL'yi kullanarak bağlanabilirsiniz:

service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi

Yukarıdakileri ekstra kavanoz ile denedim ve belirtilen şekilde dinleyen RMI bağlantı noktalarını görebilir, ancak VisualVM ile JVM bağlantı noktasına bağlandıktan sonra RMI tarafından hala rasgele bağlantı noktaları kullanılır. Çözüm: 'lsof -i' olan bağlantı noktalarını izleyin ve bağlantıları engellenmiş olanları açın.
Joseph Lust

5

Sunucunuzun güvenlik duvarının arkasında olup olmadığını kontrol edin. JMX, başladığında iki bağlantı noktası açan RMI'nin temelidir. Biri kayıt portudur, varsayılan 1099'dur ve com.sun.management.jmxremote.portseçenek ile belirtilebilir . Diğeri veri iletişimi içindir ve rastgele, soruna neden olan budur. İyi haber şu ki, JDK6'dan bu rastgele bağlantı noktası com.sun.management.jmxremote.rmi.portseçenekle belirtilebilir .

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"

4

JMX'i Güvenlik Duvarı üzerinden almak gerçekten zordur. Sorun, standart RMI'nin ikinci bir rastgele atanmış bağlantı noktası kullanmasıdır (RMI kayıt defterinin yanında).

İşe yarayan üç çözümümüz var, ancak her vakanın farklı bir çözüme ihtiyacı var:

  1. Socks proxy ile SSH Tüneli üzerinden JMX, SSH büyülü standart RMI kullanır http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html

  2. JMX MP (standart RMI'ye alternatif), yalnızca bir sabit bağlantı noktası kullanır, ancak sunucu ve istemcide özel bir kavanoz gerektirir http://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/

  3. JMX Sunucusu form kodunu başlatın, orada standart RMI kullanmak ve sabit bir ikinci bağlantı noktası kullanmak mümkündür: https://issues.apache.org/bugzilla/show_bug.cgi?id=39055


Diğer tüm cevaplar buna ek olmalıdır
ruruskyi

2

Uzak JMX sorunlarını test ederken / hata ayıklarken / teşhis ederken, ağı ve JMX'e özgü olmayan diğer sorunları elemek için her zaman MBeanServer'ı (yani localhost) içeren aynı ana bilgisayara bağlanmayı deneyin.


2

Burada zaten bazı harika cevaplar var, ancak paylaşmaya değer olduğunu düşündüğüm biraz daha basit bir yaklaşım var.

sushicutta'nın yaklaşımı iyidir, ancak her seferinde RMI Portunu almanız gerektiğinden çok manueldir. Neyse ki, bağlantı noktası tünellerini açık bir şekilde açmak yerine bir SOCKS proxy kullanarak bu sorunu çözebiliriz. Bu yaklaşımın dezavantajı, makinenizde çalıştırdığınız JMX uygulamasının bir Proxy kullanacak şekilde yapılandırılabilmesidir. Çoğu işlem bunu java özelliklerini ekleyerek yapabilirsiniz, ancak bazı uygulamalar bunu desteklemez.

Adımlar:

  1. Uzak Java hizmetinizin başlangıç ​​komut dosyasına JMX seçeneklerini ekleyin:

    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=8090
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    
  2. Uzak makinenize bir SOCKS proxy bağlantısı kurun:

    ssh -D 9696 user@remotemachine.com
    
  3. Yerel Java izleme uygulamanızı SOCKS proxy'sini (localhost: 9696) kullanacak şekilde yapılandırın. Not: Bunu bazen komut satırından yapabilirsiniz, yani:

    jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=9696
    

2

Aşağıdakiler benim için çalıştı (2101 numaralı bağlantı noktasının buna gerçekten katkıda bulunmadığını düşünüyorum):

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

Uzak bir makineden Docker'ın çalıştığı bir sunucuya bağlanıyorum ve işlem konteynerin içinde. Ayrıca, firewallD'yi durdurdum ama güvenlik duvarı açıkken bile 2100'e telnet yapabileceğim için sorunun bu olduğunu sanmıyorum. Umarım yardımcı olur.


1

JConsole / JVisualVm'yi Linux Redhat ES3 çalıştıran tomcat'e bağlanan pencerelerde çalıştırıyorum.

Aşağıdaki komutu kullanarak paket filtrelemeyi devre dışı bırakmak benim için hile yaptı:

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

burada jconsole-host, JConsole'un üzerinde çalıştığı ana bilgisayar adı veya ana bilgisayar adresidir ve jmxremote-port, uzaktan yönetim için com.sun.management.jmxremote.port için ayarlanan bağlantı noktası numarasıdır.


2
benim için bir SUSE Amazon EC2 bulut sunucusunda çalışmadı. Sanırım sorun başka yerde yatıyor.
djangofan

1

Docker konteynerlerini Tomcat ile çalıştırmak için boot2docker kullanıyorum ve aynı sorunu yaşıyorum, çözüm şuydu:

  • Ekle -Djava.rmi.server.hostname=192.168.59.103
  • Örneğin, ev sahibi ve liman işçilerinin kapta aynı JMX bağlantı noktasını kullanın: docker run ... -p 9999:9999 .... Farklı bağlantı noktalarını kullanmak işe yaramıyor.

0

Ayrıca, makine adınızın JMX'in bağlandığı IP'ye çözümlendiğinden emin olmanız gerekir; Localhost ne de 127.0.0.1 DEĞİL. Benim için, bunu açıkça tanımlayan ana bilgisayarlara bir giriş koymaya yardımcı oldu.


0

JMX'i güvenlik duvarından geçirmek o kadar da zor değil. Küçük bir yakalama var. Hem JMX yapılandırılmış portunuzu, yani. 9010 ve makinemde dinlediği dinamik bağlantı noktalarından biri> 30000 idi


0

Benim için işe yarayan adımlar şunlardır (sunucu tarafında güvenlik duvarının arkasında debian, yerel Mac'imden VPN üzerinden ulaşıldı):

sunucu ipini kontrol et

hostname -i

JVM parametrelerini kullanın:

-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]

uygulamayı çalıştır

çalışan java işleminin pid'ini bul

JMX / RMI tarafından kullanılan tüm bağlantı noktalarını kontrol edin

netstat -lp | grep [pid from step 4]

güvenlik duvarında 5. adımdaki tüm bağlantı noktalarını açın

Voila.


0

Katkıda bulunmak için, Tomcat 6 için CentOS 6.4'te yaptığım buydu.

  1. IPTables hizmetini kapatma

    service iptables stop
    
  2. Tomcat6.conf dosyasına aşağıdaki satırı ekleyin

    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]"
    

Bu şekilde JConsole kullanarak başka bir bilgisayardan bağlanabildim.


0

JMC'yi JMC'nin çalıştırılacağı bir grafik ortam sunmayan uzak bir sunucuda NiFi'nin profilini çıkarmak için Uçuş Kaydediciyi (JFR) çalıştırmaya çalışıyorum.

Burada verilen diğer yanıtlara dayanarak ve birçok deneme yanılma sonucunda, NiFi'yi başlattığımda JVM'ye ( conf / bootstrap.conf ) sağladığım şey şu:

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)

Bunu / etc / hosts içine koydum , ancak gerekli olduğundan şüpheliyim:

10.10.10.92   localhost

Ardından, JMC'yi başlattıktan sonra şu özelliklerle uzak bir bağlantı oluşturuyorum:

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

Bu arada, Özel JMX hizmet URL'sini tıklarsam şunu görürüm:

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

Bu nihayet benim için yaptı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.