Kan niet op afstand verbinding maken met JMX?

Voor sommige rare reden kan ik geen verbinding maken met VisualVMof jconsolenaar een JMX.

De parameters die worden gebruikt om de VM te starten die moet worden gecontroleerd:

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

Ik heb gecontroleerd en ik kan telnet naar deze poort, zowel lokaal als op afstand.

Toch, VisualVM of JCONSOLE slagen er niet aan om verbinding te maken, nadat u een aantal tijd probeert te hebben doorgebracht.

REMOTE MACHINE with JMX (debian)
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)
MY WORKSTATION (OS X)
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

Wat is het probleem?


Antwoord 1, Autoriteit 100%

Toevoegen -Djava.rmi.server.hostname = host ip. Zelfs ik geconfronteerd met hetzelfde probleem en dit deed de truc.

Toevoeging hiervan -Djava.rmi.server.hostname = host ipforces rmi service om het host-IP te gebruiken in plaats van 127.0.0.1


Antwoord 2, Autoriteit 38%

Dit zijn de stappen die voor mij werkten (Debian achter de firewall aan de serverzijde werd bereikt over VPN van mijn lokale Mac):

  1. Controleer de Server Public IP

    ifconfig

  2. Gebruik JVM-params:

   -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]
  1. RUN-toepassing

  2. Zoek proces-ID van het lopende Java-proces

  3. Controleer alle poorten die door JMX / RMI

    worden gebruikt

    netstat -lp | grep [pid from step 4]

  4. Open alle poorten van stap 5 op de firewall

Voila.


Antwoord 3, Autoriteit 10%

Naast het luisteren naar de poort die u hebt opgegeven (1100) luistert de JMX-server ook naar een willekeurig gekozen (ephemerale) poort. Check, b.v. Met lsof -i|grep javaAls u op Linux / OSX bent, welke poorten het Java-proces luistert naar en zorg ervoor dat uw firewall ook voor de ephemerale poort is geopend.


Antwoord 4, Autoriteit 10%

Ik heb het probleem ervaren waar het ‘voor altijd’ voegde ‘toe te voegen’ aan te sluiten. Ik heb het probleem gepasseerd door de JVENUALVM-proxy-instellingen (Tools- & GT; Options- & GT; Network) te wijzigen. Zodra ik de optie heb veranderd tot geen proxy, was ik in staat om verbinding te maken. Mijn JVM is gestart met de volgende opties:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=2222 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=<external_IP_of_server> 

Toen ik de JMX-verbinding heb toegevoegd, heb ik opgegeven “extern_IP_OF_SERVER: 2222”


Antwoord 5, Autoriteit 7%

Ik had een soortgelijk probleem bij het gebruik van poortdoorschakeling.
Ik heb een externe machine met Tomcat Luisteren voor JMX-interacties op localhost:9000.

Van mijn lokale machine, ik ben gewend om port-forwarding mee te doen met:

ssh -L 9001:localhost:9000 tomcat.example.com

(dus op afstand Poort 9000 wordt doorgestuurd naar de poort 9001 van mijn lokale machine).

Toen ik Toen ik probeerde Visualvm te gebruiken om verbinding te maken met localhost:9001, werd de verbinding geweigerd. JMX lijkt aan beide zijden poortnummers te vereisen om identiek te zijn.

Dus mijn oplossing gebruikte poortnummers 9000 en 9000:

   ssh -L 9000:localhost:9000 tomcat.example.com

De VisualVM van mijn lokale machine maakt nu verbinding met de Tomcat van de externe machine via localhost:9000.

Zorg ervoor dat er geen andere service (Tomcat op dev-machine?) op dezelfde poort luistert.

Bekijk ook parameters correct instellen.


Antwoord 6, autoriteit 6%

Sinds ik me net heb aangemeld, kan ik het antwoord van Hett niet upvoten, maar het heeft mijn leven gered van weer een week van vallen en opstaan!

Dit is een voorbeeld van een werkend Dockerbestand:

FROM store/oracle/serverjre:8 
RUN mkdir -p /opt/app
ENV APP_PATH /opt/app
WORKDIR $APP_PATH   
COPY . $APP_PATH
CMD ["java", \
     "-Dcom.sun.management.jmxremote", \
     "-Dcom.sun.management.jmxremote.port=9010", \
     "-Dcom.sun.management.jmxremote.rmi.port=9010", \
     "-Dcom.sun.management.jmxremote.authenticate=false", \
     "-Dcom.sun.management.jmxremote.ssl=false", \
     "-Djava.rmi.server.hostname=12.345.67.89", \
     "-jar", \
     "app-service-0.0.1-SNAPSHOT.jar"]
EXPOSE 9010

Antwoord 7, autoriteit 6%

Mijn twee cent voor de bovenstaande antwoorden..

Ik zie dat in de meeste antwoorden alleen de hostnamen zijn genoemd, maar geen poort. Als we geen poorten hebben opgegeven, wijst de server dynamisch de RMI-poort toe. Er zullen geen problemen zijn als beide servers zich in hetzelfde subnet bevinden of als er geen firewallproblemen zijn. Als u zich zorgen maakt, kunnen we onderstaande JVM-parameter toevoegen om te bevriezen.

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

Bijvoorbeeld:

<option name="-Dcom.sun.management.jmxremote.rmi.port" value="11001"/>

Zorg ervoor dat zowel RMI- als JMX-poorten hetzelfde moeten zijn. Voor meer informatie, klik hier


Antwoord 8, autoriteit 4%

Als u het bestand jaruitvoert (via de optie -jar), moet u alle andere jvm-opties specificeren vóór de optie -jar!


Antwoord 9, autoriteit 2%

Ik heb het probleem gevonden, mijn rmi-service draaide op het IP-adres van de host, namelijk “127.0.0.1”. Om op afstand verbinding te maken met de jvm moest ik het externe ip aan de hostnaam binden. Om dit in Unix-systemen te doen, gebruikt u het commando hostnameom de naam van de hostnaam te krijgen. Controleer vervolgens het ip dat is toegewezen aan de hostnaam, om dit te weten te komen, gebruik ping $(hostname)je zult zien dat het systeem het ip van de hosname pingt. Als uw host-ip de standaard “127.0.0.1” was en u deze wilt wijzigen, bewerk dan het bestand /etc/hosts als superuser. Nadat u de rmi-service opnieuw heeft opgestart, kunt u deze bereiken vanaf de externe computer.


Antwoord 10

kijk in /etc/hosts of je geen verkeerd IP-adres voor je machine hebt
voorbeeld :
127.0.0.1 localhost
127.0.0.2 uw_machine
185.12.58.2 uw_machine (het goede IP-adres voor uw machine)

JMX neemt de IP 127.0.0.2 en vergeet de andere


Antwoord 11

Het volgende werkte voor mij, dankzij @Arpit Agarwal. Deze extra jvm-parameter toegevoegd die voor mij werkte.

   -Djava.rmi.server.hostname=192.168.1.16

Volledige lijst die voor mij werkte.

-Dcom.sun.management.jmxremote 
 -Dcom.sun.management.jmxremote.port=21845
 -Dcom.sun.management.jmxremote.ssl=false 
 -Dcom.sun.management.jmxremote.authenticate=false
 -Dcom.sun.management.jmxremote.local.only=false 
 -Djava.rmi.server.hostname=192.168.1.16
 -Dcom.sun.management.jmxremote.rmi.port=10099 

Other episodes