Angenommen, Sie haben den JMX-Server (Alias 'JMX Agent' Alias 'die JVM, zu der Sie eine Verbindung herstellen möchten') auf 'TARGET MACHINE' mit dem RMI-Registrierungsport unter 'RMI REGISTRY PORT' und dem JMX RMI- Serverport unter ' JMX RMI ' ausgeführt SERVER PORT'.
Hinweis:
Die RMI-Registrierung teilt JMX-Clients mit, wo sich der JMX-RMI-Serverport befindet . Informationen erhalten Sie unter Schlüssel jmxrmi.
Der RMI-Registrierungsport ist allgemein bekannt, da er beim JVM-Start über die Systemeigenschaften festgelegt wird.
Der JMX-RMI-Server-Port ist im Allgemeinen nicht bekannt, da die JVM ihn zufällig auswählt (sofern keine anderen Vorsichtsmaßnahmen getroffen werden).
Der folgende URI führt zu einer erfolgreichen Verbindung (getestet)
Ein gut informierter JMX-Client stellt eine Verbindung zur "ipsite" her, um JMX-over-RMI-Austausche durchzuführen. Aber was ist mit dem JMX-Client, der diesen Port nicht kennt? Die Geduld...
Der URL-Teil wird zerlegt in:
/jndi/ - Dies scheint dem JMX-Client mitzuteilen, dass er am folgenden Speicherort Suchinformationen abrufen kann
rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi - Ja, wir erhalten Informationen über den JMX-RMI-Server in der RMI-Registrierung unter dem Suchschlüssel jmxrmi
Dies ist etwas Cart-before-Horse, da man sich zuerst an die RMI-Registrierung wenden muss, die im letzten Teil der SLP-URL angegeben ist.
Nachdem wir uns intuitiv am Kopf gekratzt haben, versuchen wir Folgendes:
Ja das funktioniert Der JMX RMI-Server-Port wird gut von der Registrierung bezogen. Bei zweiten Überlegungen sollte der Zielcomputer auch aus der Registrierung bezogen werden, also:
service:jmx:rmi://192.168.30.10:1234- sagt, dass sich auf dem Computer ein JMX-Agent mit der IP-Adresse 192.168.30.10 befindet. Der JMX-Agent verwendet (TCP) -Port 1234, um JMX-Dienste über RMI bereitzustellen (fungiert im Wesentlichen als RMI-Server).
/jndi/rmi://192.168.30.10:2344/jmxrmi - sagt, dass sich der RMI-Stub für die Interaktion mit dem JMX-Agenten über RMI in der RMI-Registrierung befindet, die auf dem Computer mit der IP-Adresse 192.168.30.10 ausgeführt wird und den (TCP-) Port 2344 verwendet. Um den RMI-Stub abzurufen, müssen Sie Suchen Sie nach der Bindung "jmxrmi".
Frühere Antworten deuten darauf hin, dass der zweite Teil der URL darin besteht, den Server-Port des JMX RMI-Servers abzurufen. Das ist nicht richtig. Der JMX-RMI-Serverport ist (TCP) 1234 und Teil der URL. Was Sie von der RMI-Registrierung erhalten, ist der RMI-Stub ( javax.management.remote.rmi.RMIServerImpl_Stub), mit dem Sie über RMI mit dem JMX-Agenten (MBean Server) kommunizieren können.
Können Sie bitte erklären, wie die URLs ohne das 1. IP: Port-Paar ( 192.168.30.10:1234in diesem Beispiel) funktionieren, da Sie angeben, dass die Antwort von @ david-tonhofer nicht korrekt ist ? dh die URLs, die mit beginnen service:jmx:rmi:///jndi/rmi:. Ein Grund dafür, dass dies im Allgemeinen so verwirrend ist, ist, dass wenn wir beim Starten der JVM einen jmx-Port angeben, dieser nirgendwo auf RMI verweist : -Dcom.sun.management.jmxremote.port=2344. (Beachten Sie, dass meiner Erfahrung nach der jmxremote-Port dem Teil "RMI Registry" der URL zugeordnet ist, nicht dem Teil "JMX RMI Server".)
erik.weathers
Es gibt verschiedene Möglichkeiten, die IP und den Port anzugeben, die der JMX-Agent verwenden wird. Wenn Sie es auf eine bestimmte IP und Adresse festlegen möchten, können Sie verwenden service:jmx:rmi://192.168.30.10:1234. Alternativ können Sie com.sun.management.—Eigenschaften verwenden. Verwenden Sie eine URL service:jmx:rmi:///…, damit Java die IP und den Port für Sie auswählt (zufällig oder basierend auf Systemeigenschaften). Verwenden Sie eine URL service:jmx:rmi://0.0.0.0:1234, um Port 1234 an alle Schnittstellen zu binden. Und so weiter. Hoffe das hilft.
Antworten:
Ich werde eine Antwort, die ich zuvor für diese Frage geschrieben habe, wiederverwenden: Es kann keine Verbindung zu Tomcats MBeanServer über jconsole in Java6 hergestellt werden
Es ist nicht vollständig, könnte aber helfen:
Angenommen, Sie haben den JMX-Server (Alias 'JMX Agent' Alias 'die JVM, zu der Sie eine Verbindung herstellen möchten') auf 'TARGET MACHINE' mit dem RMI-Registrierungsport unter 'RMI REGISTRY PORT' und dem JMX RMI- Serverport unter ' JMX RMI ' ausgeführt SERVER PORT'.
Hinweis:
jmxrmi
.Der folgende URI führt zu einer erfolgreichen Verbindung (getestet)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Das sieht böse aus. Lass es uns auseinander schneiden.
Diese URI ist eine RFC2609 "Service Location Protocol URL" (nun, es ist wirklich eine URI, oder?)
Es besteht aus:
service
- eine Konstantejmx:rmi
- Der Diensttyp, bestehend aus: abstraktem Typjmx
und URL-Schemarmi
Saft wird zerlegt in:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
- ipsite/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- URL-TeilEin gut informierter JMX-Client stellt eine Verbindung zur "ipsite" her, um JMX-over-RMI-Austausche durchzuführen. Aber was ist mit dem JMX-Client, der diesen Port nicht kennt? Die Geduld...
Der URL-Teil wird zerlegt in:
/jndi/
- Dies scheint dem JMX-Client mitzuteilen, dass er am folgenden Speicherort Suchinformationen abrufen kannrmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- Ja, wir erhalten Informationen über den JMX-RMI-Server in der RMI-Registrierung unter dem Suchschlüsseljmxrmi
Dies ist etwas Cart-before-Horse, da man sich zuerst an die RMI-Registrierung wenden muss, die im letzten Teil der SLP-URL angegeben ist.
Nachdem wir uns intuitiv am Kopf gekratzt haben, versuchen wir Folgendes:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Ja das funktioniert Der JMX RMI-Server-Port wird gut von der Registrierung bezogen. Bei zweiten Überlegungen sollte der Zielcomputer auch aus der Registrierung bezogen werden, also:
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Noch besser, das funktioniert auch!
Verweise:
quelle
Erklären:
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
service:jmx:rmi://192.168.30.10:1234
- sagt, dass sich auf dem Computer ein JMX-Agent mit der IP-Adresse 192.168.30.10 befindet. Der JMX-Agent verwendet (TCP) -Port 1234, um JMX-Dienste über RMI bereitzustellen (fungiert im Wesentlichen als RMI-Server)./jndi/rmi://192.168.30.10:2344/jmxrmi
- sagt, dass sich der RMI-Stub für die Interaktion mit dem JMX-Agenten über RMI in der RMI-Registrierung befindet, die auf dem Computer mit der IP-Adresse 192.168.30.10 ausgeführt wird und den (TCP-) Port 2344 verwendet. Um den RMI-Stub abzurufen, müssen Sie Suchen Sie nach der Bindung "jmxrmi".Frühere Antworten deuten darauf hin, dass der zweite Teil der URL darin besteht, den Server-Port des JMX RMI-Servers abzurufen. Das ist nicht richtig. Der JMX-RMI-Serverport ist (TCP) 1234 und Teil der URL. Was Sie von der RMI-Registrierung erhalten, ist der RMI-Stub (
javax.management.remote.rmi.RMIServerImpl_Stub
), mit dem Sie über RMI mit dem JMX-Agenten (MBean Server) kommunizieren können.Hoffe das hilft.
quelle
192.168.30.10:1234
in diesem Beispiel) funktionieren, da Sie angeben, dass die Antwort von @ david-tonhofer nicht korrekt ist ? dh die URLs, die mit beginnenservice:jmx:rmi:///jndi/rmi:
. Ein Grund dafür, dass dies im Allgemeinen so verwirrend ist, ist, dass wenn wir beim Starten der JVM einen jmx-Port angeben, dieser nirgendwo auf RMI verweist :-Dcom.sun.management.jmxremote.port=2344
. (Beachten Sie, dass meiner Erfahrung nach der jmxremote-Port dem Teil "RMI Registry" der URL zugeordnet ist, nicht dem Teil "JMX RMI Server".)service:jmx:rmi://192.168.30.10:1234
. Alternativ können Siecom.sun.management.—
Eigenschaften verwenden. Verwenden Sie eine URLservice:jmx:rmi:///…
, damit Java die IP und den Port für Sie auswählt (zufällig oder basierend auf Systemeigenschaften). Verwenden Sie eine URLservice:jmx:rmi://0.0.0.0:1234
, um Port 1234 an alle Schnittstellen zu binden. Und so weiter. Hoffe das hilft.Laut javax.management.remote.rmi
Diese URL wird so zusammengestellt
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
quelle