VisualVM sur Putty SSH tunnel
Je suis en train de profil à distance application java, en fait, c'est un gameserver. Il fonctionne normalement sur ma machine locale (windows XP x64 avec le JDK1.7.0_02 x64), mais se comporte très bizarre sur le serveur de production (CentOS avec le JDK1.7.0_03 i586).
J'ai fait beaucoup de recherches et découvert que je devrais utiliser VisualVM pour cette tâche. Donc, VisualVM fonctionne très bien sur l'ordinateur local, mais il n'y a pas d'accroche sur l'ordinateur local, j'ai besoin de profilage dans un environnement de production réel de la charge utile. J'ai commencé à jstatd sur la machine distante avec des arguments
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=false &
avec le fichier de stratégie
grant codebase "file:/usr/java/jdk1.7.0_02/lib/tools.jar" {
permission java.security.AllPermission;
};
puis j'ai commencé mon application java comme ce
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
D'application et de jstatd sont lancés avec la racine priveledges.
et VisualVM n'a pas réussi à se connecter à l'hôte distant. Mais sur l'hôte distant, je vois les journaux suivants, tandis que VisualVM est en cours d'exécution et l'hôte distant a ajouté:
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)]
Après de plus amples recherches sur google, j'ai trouvé que j'ai besoin d'utiliser le tunnel ssh. J'ai configuré le mastic de la façon suivante
http://www.advancedigital.ru/show/putty_config.jpg
et VisualVM que ce
http://www.advancedigital.ru/show/visualvm_config.jpg
Adter munipulations au-dessus de VisualVM connecter à un hôte distant, mais je ne peux voir que les threads tableau récapitulatif et profiler est inactif.
J'ai vu quelques recommandations que les machines virtuelles sur les deux machines doivent être similaires et ont la même plate-forme (x86 ou x64), mais j'ai déjà essayé de profilage à partir d'une autre machine (windows 7 x86 avec le JDK1.7.0_03 x86), et avoir le même résultat.
J'ai aussi essayé cela, mais obtenir le même résultat à nouveau.
VisualVM sur ssh
Comment puis-je obtenir ce profilage de travail?
- 2 ans plus tard, mais j'ai aussi ajouté ma façon de tunneling.
Vous devez vous connecter pour publier un commentaire.
Noter que si le serveur dispose de bibliothèques X11 est installé, vous pouvez exécuter JVisualVM à distance et juste Mastic avant le X11 connexion à un X11-server en cours d'exécution sur votre machine locale.
Si vous n'avez pas de X11-server disponible, Xming - http://www.straightrunning.com/XmingNotes/ - fonctionne très bien pour cela. Si votre ordinateur est sécurisé, vous pouvez exécuter sans contrôle d'accès qui rend beaucoup plus facile de se lever et courir.
Noter que X11 communication est tout à fait clair. Utiliser "blowfish"-cypher et de poser pour la compression.
Même si cela a été répondu, j'ai réussi à le faire donc je vais ajouter mon approche:
J'ai utilisé les sources suivantes:
https://bowerstudios.com/node/731
Je l'ai fait dans windows à l'aide de git bash qui a commande ssh. Vous pouvez également le faire en utilisant cygwin ou pure minggw.
1) lancez ssh tunnel de commande dans l'invite de commande (je le fais dans git bash/MINGGW32).
2) Exécuter votre application sur le serveur avec JMX d'options (une ligne)
3) Exécuter visualVM à travers socks proxy pour vous connecter (une ligne)
4) ajouter votre JMX connexion à distance dans visualVM
Également disponibles: http://maythesource.com/2013/12/04/connecting-to-jmx-from-visualvm-using-ssh-tunnel/ (sera mis à jour avec plus d'informations au fil du temps).
Je voudrais commencer par le débogage juste jstatd connexion et la laisser connexion JMX pour plus tard. Depuis que vous avez écrit, il n'est pas clair pourquoi devriez-vous utiliser le tunnel ssh. Est-il un pare-feu sur votre ordinateur hôte distant ou pourquoi pensez-vous que vous avez besoin pour utiliser le tunnel ssh.
Une remarque - il n'est pas vrai que les machines virtuelles sur les deux machines doivent être similaires et ont la même plate-forme (x86 ou x64).