Java jconsole jmx-Verbindung scheitern
Ich versuche zu verbinden, jconsole, um eine jvm aufgerufen von:
java \
-Djava.util.logging.config.file=./logging.properties \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.port=12700 \
-cp . Sleep
Ich versuche dann zu starten Sie jconsole mit:
jconsole -J-Djava.util.logging.config.file=./logging.properties
Dem loggin.Eigenschaften-Datei enthält:
sun.rmi.level=FINEST
Nach dem öffnen eines socket an port 12700, rmi, dann erscheint Sie versuchen, eine Verbindung auf einem anderen port :
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://10.40.243.12:12700/jmxrmi] connecting...
Jan 5, 2012 2:30:42 PM RMIConnector connect
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://10.40.243.12:12700/jmxrmi] finding stub...
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPEndpoint <clinit>
FINE: JConsole.addHost: localHostKnown = true, localHost = 10.206.6.59
Jan 5, 2012 2:30:43 PM sun.rmi.server.UnicastRef newCall
FINE: JConsole.addHost: get connection
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPTransport <init>
FINE: JConsole.addHost: Version = 2, ep = [10.206.6.59:0]
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPEndpoint getLocalEndpoint
FINE: JConsole.addHost: created local endpoint for socket factory null on port 0
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINE: JConsole.addHost: create connection
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPEndpoint newSocket
FINER: JConsole.addHost: opening socket to [10.40.243.12:12700]
Jan 5, 2012 2:30:43 PM sun.rmi.transport.proxy.RMIMasterSocketFactory createSocket
FINE: JConsole.addHost: host: 10.40.243.12, port: 12700
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINER: JConsole.addHost: server suggested 10.206.6.59:12306
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINER: JConsole.addHost: using 10.206.6.59:0
Jan 5, 2012 2:30:43 PM sun.rmi.server.UnicastRef newCall
FINER: JConsole.addHost: create call context
Jan 5, 2012 2:30:43 PM sun.rmi.server.UnicastRef logClientCall
FINER: JConsole.addHost: outbound call: [endpoint:[10.40.243.12:12700](remote),objID:[0:0:0, 0]] : sun.rmi.registry.RegistryImpl_Stub[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)
Jan 5, 2012 2:30:43 PM sun.rmi.transport.StreamRemoteCall <init>
FINER: JConsole.addHost: write remote call header...
Jan 5, 2012 2:30:43 PM sun.rmi.transport.StreamRemoteCall getOutputStream
FINER: JConsole.addHost: getting output stream
Jan 5, 2012 2:30:43 PM sun.rmi.server.UnicastRef invoke
FINER: JConsole.addHost: execute call
Jan 5, 2012 2:30:43 PM sun.rmi.transport.StreamRemoteCall getInputStream
FINER: JConsole.addHost: getting input stream
Jan 5, 2012 2:30:43 PM sun.rmi.server.LoaderHandler loadClass
FINE: JConsole.addHost: name = "javax.management.remote.rmi.RMIServerImpl_Stub", codebase = "", defaultLoader = sun.misc.Launcher$AppClassLoader@a39137
Jan 5, 2012 2:30:43 PM sun.rmi.server.LoaderHandler loadClass
FINER: JConsole.addHost: class "javax.management.remote.rmi.RMIServerImpl_Stub" found via defaultLoader, defined by null
Jan 5, 2012 2:30:43 PM sun.rmi.server.LoaderHandler loadClass
FINE: JConsole.addHost: name = "java.rmi.server.RemoteStub", codebase = "", defaultLoader = sun.misc.Launcher$AppClassLoader@a39137
Jan 5, 2012 2:30:43 PM sun.rmi.server.LoaderHandler loadClass
FINER: JConsole.addHost: class "java.rmi.server.RemoteStub" found via defaultLoader, defined by null
Jan 5, 2012 2:30:43 PM sun.rmi.server.LoaderHandler loadClass
FINE: JConsole.addHost: name = "java.rmi.server.RemoteObject", codebase = "", defaultLoader = sun.misc.Launcher$AppClassLoader@a39137
Jan 5, 2012 2:30:43 PM sun.rmi.server.LoaderHandler loadClass
FINER: JConsole.addHost: class "java.rmi.server.RemoteObject" found via defaultLoader, defined by null
Jan 5, 2012 2:30:43 PM sun.rmi.server.UnicastRef done
FINE: JConsole.addHost: free connection (reuse = true)
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPChannel free
FINE: JConsole.addHost: reuse connection
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPChannel free
FINE: JConsole.addHost: create reaper
Jan 5, 2012 2:30:43 PM sun.rmi.server.UnicastRef newCall
FINE: JConsole.addHost: get connection
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINE: JConsole.addHost: create connection
Jan 5, 2012 2:30:43 PM sun.rmi.transport.tcp.TCPEndpoint newSocket
FINER: JConsole.addHost: opening socket to [tdiap12:41096]
Jan 5, 2012 2:30:43 PM sun.rmi.transport.proxy.RMIMasterSocketFactory createSocket
FINE: JConsole.addHost: host: tdiap12, port: 41096
Den ersten Verbindungsversuch erfolgreich, da auf dem remote-server, kann ich sehen, Verbindung.
wse2tst@tdiap12:~> netstat -a | grep 12700
tcp 0 0 *:12700 *:* LISTEN
tcp 0 0 tdiap12.vgcar.net:12700 per-00c0016253a2.vgca:12252 ESTABLISHED
Den packet-trace zeigt eine erfolgreiche Verbindung als auch.
Die zweite Verbindung zu port 41096 mal aus, und die jconsole Anwendung meldet einen "Connection failure" und beendet die erste Verbindung als auch. Warum ist eine zweite Verbindung versucht? Gibt es eine Möglichkeit den port angeben, der für diese zweite Verbindung? Der Ziel-server wird streng kontrolliert, und die anderen ports sind blockiert durch firewall-Regeln. Auf mehrere Verbindungsversuche, der zweite port wird sich ändern, um verschiedene zufällige Werte.
Vielen Dank für jede Hilfe,
Steve
Wenn ich versuche eine Verbindung von meinem lokalen Computer, dem remote-Computer zeigt Folgendes an:
wse2tst@tdiap12:~> netstat -a | grep 12700 tcp 0 0 *:12700 *:* LISTEN tcp 0 0 tdiap12.vgcar.net:12700 per-00c0016253a2.vgca:12252 ESTABLISHED
ich gehe davon aus, dass die Verbindung aufgebaut wird und nicht blockiert wird von einer lokalen firewall-Regel. Die packet-trace zeigt auch, dass die Verbindung erfolgreich ist.Ich denke, Sie müssen add-Dcom.Sonne.management.jmxremote während der Erziehung die jvm, die Sie angegeben auf der Oberseite von dieser Frage, wir nicht müssen?
Ich habe nicht gesehen, dass in der Dokumentation. Was würden wir tun? Die ersten zwei -Dcom.Sonne.management.jmxremote-Werte aktivieren der Verschlüsselung und Sicherheit. Der Dritte definiert die listening-port für eingehende JMX-verbindungen. Ich glaube nicht, dass Einstellung -Dcom.Sonne.management.jmxremote von selbst hätte einen Einfluss.
Versuchen Sie es. Er ließ Sie in der JVM-look für remote-verbindungen.
InformationsquelleAutor Steven | 2012-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Out-of-the-box-JMX-Implementierung verwendet zwei ports - einen für die Registrierung (die eine, die Sie angegeben haben) und eine für die eigentliche Verbindung, die ausgewählt ist zufällig (!). Dies ist durchaus ein design-Fehler, da die zufällige Auswahl des zweiten Ports macht es sehr schwer, eine firewall zu konfigurieren.
Es gibt Möglichkeiten, um es aber - entweder Sie können es selbst tun manuell, oder wenn Sie Tomcat verwenden, Sie lassen es handle es für Sie.
InformationsquelleAutor Jens Borgland
neue und bessere Lösung als die Verwendung eines manuell codiert-agent, ist die Verwendung der neuen parameter, die scheint, zu sein eingeführt in Java 7:
-Dcom.sun.management.jmxremote.rmi.port=7091
So, in Kombination - der gleiche port verwendet werden kann:
-Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.rmi.port=7091
Lösung hier gefunden:
http://hirt.se/blog/?p=289
InformationsquelleAutor Shivan
stellen Sie sicher, dass Ihre Anwendung mit nachstehenden Befehl,
dann öffnen jconsole mit admin-Berechtigungen; Sie könnten in der Lage sein, um verbinden, ohne jedes Problem.
wenn Sie möchten, führen Sie mehrere jar-Dateien, stellen Sie sicher, dass verschiedene ports verwenden, sonst wird es Fehler geben, die sagen, es ist schon binden der JVM
InformationsquelleAutor Isuru Dewasurendra
Können Sie stellen Sie den zweiten port mit dem parameter -"Dcom.Sonne.management.jmxremote.rmi.port", wo die port-Nummer kann derselbe sein wie der erste . Auch nach Einstellung dieser, wird es promt für unsichere Verbindung ... bitte erlauben Sie unsichere Verbindung nur dann, es wird Ihnen erlauben, weiter zu gehen, ansonsten bis dann im Protokoll finden Sie Fehler failed to connect: java.lang.SecurityException: Sie Erwartet eine Sonne.rmi.server.UnicastRef2 remote-Referenz im stub!
Dank
InformationsquelleAutor Rajesh Katadi