Я пытаюсь профилировать удаленное приложение Java, на самом деле это игровой сервер.Он работает нормально на моей локальной машине (Windows XP x64 с JDK1.7.0_02 x64), но на рабочем сервере ведет себя очень странно (CentOS с JDK1.7.0_03 i586).
Я сделал многопоиска и обнаружил, что я должен использовать VisualVM для этой задачи.Таким образом, VisualVM прекрасно работает на локальной машине, но на локальной машине нет зависаний, мне нужно профилирование в производственной среде с реальной полезной нагрузкой.Я запустил jstatd на удаленной машине с аргументами
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=false &
с файлом политики
grant codebase "file:/usr/java/jdk1.7.0_02/lib/tools.jar" {
permission java.security.AllPermission;
};
, затем я запустил свое Java-приложение, как это
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
Оба приложенияи jstatd запускаются с правами суперпользователя.
, и VisualVM не удалось подключиться к удаленному хосту.Но на удаленном хосте я вижу следующий журнал, в то время как VisualVM работает и добавляется удаленный хост:
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)]
После дальнейшего поиска в Google я обнаружил, что мне нужно использовать туннелирование ssh.Я настроил замазку следующим образом
http://www.advancedigital.ru/show/putty_config.jpg
и VisualVM, так как это
http://www.advancedigital.ru/show/visualvm_config.jpg
Adter munipulation над VisualVM подключается к удаленному хосту,но я вижу только сводную диаграмму потоков и профилировщик неактивен.
Я видел некоторые рекомендации, что jvms на обеих машинах должны быть одинаковыми и иметь одинаковую платформу (x86 или x64), но я уже пробовалпрофилирование с другого компьютера (windows 7 x86 с JDK1.7.0_03 x86) и тот же результат.
Я тоже пробовал это, но снова получаю тот же результат. VisualVM поверх ssh
Как мне заставить этот профилирование работать?