VisualVM über Putty-SSH-tunnel
Ich versuche, remote-Profil-java-app, eigentlich ist es ein gameserver. Es normal funktioniert auf meiner lokalen Maschine (windows XP x64 mit JDK1.7.0_02 x64), aber verhält sich sehr komisch auf den Produktions-server (CentOS mit JDK1.7.0_03 i586).
Ich habe eine Menge Suche und fand heraus, dass ich verwenden soll, VisualVM für diese Aufgabe. So VisualVM funktioniert Super auf der lokalen Maschine, aber es gibt keine Hänger auf der lokalen Maschine, ich brauche profiling in der Produktionsumgebung mit realen Nutzlast. Ich begann jstatd auf der remote-Maschine mit Argumenten
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=false &
mit der policy-Datei
grant codebase "file:/usr/java/jdk1.7.0_02/lib/tools.jar" {
permission java.security.AllPermission;
};
dann begann ich meine java-Anwendung wie diese
java -server -Dcom.sun.management.jmxremote\
-Dcom.sun.management.jmxremote.port=4000\
-Dcom.sun.management.jmxremote.ssl=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-jar /home/pinballSocketServer/pinballSocketServer.jar
Anwendung und jstatd gestartet werden, die mit root-priveledges.
und VisualVM nicht geschafft, eine Verbindung zum remote-host. Aber auf dem remote-host sehe ich das folgende Protokoll, während VisualVM ausgeführt wird und remote-host Hinzugefügt:
Feb 16, 2012 7:11:52 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:11:56 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:12:00 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:12:04 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Nach weiteren googlen fand ich heraus, dass ich brauchen, um ssh-tunneling. Ich konfiguriert den Kitt in der folgenden Weise
http://www.advancedigital.ru/show/putty_config.jpg
und VisualVM als diese
http://www.advancedigital.ru/show/visualvm_config.jpg
Adter munipulations oben VisualVM Verbindung zum remote-host, aber ich sehe nur die threads, die Zusammenfassung und profiler ist inaktiv.
Ich habe gesehen, einige Empfehlungen, die jvms auf beiden Maschinen sollten ähnlich sein und haben die gleiche Plattform (x86 oder x64), aber ich habe auch schon versucht profiling von einem anderen Rechner (windows 7 x86 mit JDK1.7.0_03 x86), und das gleiche Ergebnis.
Ich habe auch dies versucht, bekomme aber das gleiche Ergebnis wieder.
VisualVM über ssh
Wie kann ich diese Profilierung zu arbeiten?
InformationsquelleAutor Anton Boritskiy | 2012-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beachten Sie, dass, wenn der server X11-Bibliotheken installiert, die Sie ausführen können JVisualVM Remote und nur Putty vorwärts die X11-Verbindung zu einem X11-server auf Ihrer lokalen Maschine.
Wenn Sie nicht über einen X11-server zur Verfügung, Xming - http://www.straightrunning.com/XmingNotes/ - funktioniert gut für diese. Wenn Ihr computer sicher ist, können Sie ausführen, ohne access-control macht es viel einfacher, aufzustehen und zu laufen.
Beachten Sie, dass X11-Kommunikation ist ziemlich langatmig. Verwenden Sie "blowfish"-cypher und Fragen für die Kompression.
X11 kann etwas tun, dass Windows nicht.
nach einem halben Jahr habe ich versucht, diese Lösung, und es funktioniert wie ein Charme
InformationsquelleAutor Thorbjørn Ravn Andersen
Obwohl diese bereits beantwortet wurde, habe ich es geschafft, es zu tun, so will ich hinzufügen, mein Ansatz:
Ich habe folgende Quelle:
https://bowerstudios.com/node/731
Habe ich diese in windows mit git bash, ssh-Befehl. Sie können auch mit cygwin oder Reine minggw.
1) Führen Sie ssh-tunnel Befehl in der Eingabeaufforderung (ich mache das in der git-bash/MINGGW32).
2) Führen Sie Ihre Anwendung auf dem server mit JMX-Optionen (one-liner)
3) Führen visualVM über socks-proxy-Verbindung (one-liner)
4) Tatsächlich fügen Sie Ihre JMX-remote-Verbindung in visualVM
Ebenfalls erhältlich: http://maythesource.com/2013/12/04/connecting-to-jmx-from-visualvm-using-ssh-tunnel/ (wird aktualisiert, mit mehr info über die Zeit).
InformationsquelleAutor Menelaos Bakopoulos
Ich würde anfangen mit Debuggen nur jstatd Verbindung und lassen Sie die JMX-Verbindung für später. Von Ihnen schrieb es ist nicht klar, warum sollten Sie das ssh-tunneling. Gibt es eine firewall auf dem remote-host oder warum denken Sie, dass Sie brauchen, um ssh-tunneling.
Eine weitere Notiz - es ist nicht wahr, dass jvms auf beiden Maschinen sollten ähnlich sein und haben die gleiche Plattform (x86 oder x64).
InformationsquelleAutor Tomas Hurka