Wie finde ich die Standard-JMX-Portnummer?

Lesezeit: 3 Minuten

Benutzeravatar von chance
Chance

Ich führe eine Java-Anwendung auf einer Java 6-VM auf einem Remote-Windows XP aus, auf dem ich jvisualvm.exe ausführen kann, um automatisch eine Verbindung zur laufenden Anwendung herzustellen.

Jetzt muss ich diese Anwendung von meinem lokalen Computer aus verbinden, aber ich kenne die JMX-Portnummer des Remotecomputers nicht. Wo kann ich es finden? Oder muss ich diese Anwendung mit einigen VM-Parametern neu starten, um die Portnummer anzugeben?

Nachdem ich die Frage How to find the JMX port in a server gelesen hatte, führte ich den Befehl auf dem Remote-Computer aus

netstat -apn

aber nichts bekommen.

  • mögliches Duplikat von How to activate JMX on my JVM for access with jconsole?

    – Kunstbristol

    26. April 2012 um 11:05 Uhr

Benutzeravatar von Gray
Grau

Jetzt muss ich diese Anwendung von meinem lokalen Computer aus verbinden, aber ich kenne die JMX-Portnummer des Remotecomputers nicht. Wo kann ich es finden? Oder muss ich diese Anwendung mit einigen VM-Parametern neu starten, um die Portnummer anzugeben?

Standardmäßig veröffentlicht JMX nicht auf einem Port, es sei denn, Sie geben die Argumente auf dieser Seite an: So aktivieren Sie JMX…

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

HINWEIS: Sie müssen auf die Sicherheitsaspekte einiger der oben genannten Einstellungen achten.

Wenn Sie es ausführen, sollten Sie auch auf diese Systemeigenschaften zugreifen können, um zu sehen, ob sie festgelegt wurden:

if (System.getProperty("com.sun.management.jmxremote") == null) { System.out.println("JMX Remote ist deaktiviert");  } anders [
    String portString = System.getProperty("com.sun.management.jmxremote.port");
    if (portString != null) {
        System.out.println("JMX running on port "
            + Integer.parseInt(portString));
    }
}

Depending on how the server is connected, you might also have to specify the following parameter. As part of the initial JMX connection, jconsole connects up to the RMI port to determine which port the JMX server is running on. When you initially start up a JMX enabled application, it looks its own hostname to determine what address to return in that initial RMI transaction. If your hostname is not in /etc/hosts or if it is set to an incorrect interface address then you can override it with the following:

-Djava.rmi.server.hostname=<IP address>

As an aside, my SimpleJMX package allows you to define both the JMX server and the RMI port or set them both to the same port. The above port defined with com.sun.management.jmxremote.port is actually the RMI port. This tells the client what port the JMX server is running on.

  • You missed -Dcom.sun.management.jmxremote.ssl=false and -Djava.rmi.server.hostname=<IP address>

    – Claudio

    Aug 2, 2016 at 7:08

  • Neither of those are required @Claudio up to Java 7 at least.

    – Gray

    Aug 2, 2016 at 15:12

  • Not in my experience. I’m running Java 7 on Linux CentOS 6 . I found your answer, and it didn’t work. Fortunately, you also provided the link to the original answer and adding those flags it started working.No idea which one was actually needed and why.

    – Claudio

    Aug 2, 2016 at 15:59

  • You can always enable it even after the JVM is started using jcmd ManagementAgent.start, provided that you have access to the process

    – Dragas

    Oct 12, 2021 at 12:00

  • You also might need to add these two additional arguments: -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost

    – beaudet

    Dec 16, 2021 at 20:55

1430970cookie-checkWie finde ich die Standard-JMX-Portnummer?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy