Все еще не могу подключиться к Tomcat 6 удаленно через VisualVM - PullRequest
9 голосов
/ 19 февраля 2010

Если проверены другие вопросы, касающиеся этой проблемы, но пока нет душевности.Вот мои настройки: TC6 работает на Debian VM на моем MacBook.в /etc/default/tomcat6.0 у меня установлены следующие параметры:

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

netstat -ntlp дает мне:

tcp6       0      0 :::8080                 :::*                    LISTEN      6550/java
tcp6       0      0 :::8086                 :::*                    LISTEN      6550/java

Где 6550:

root      6550  3.3  6.8 224888 52984 pts/0    Sl   10:31   0:43 /usr/lib/jvm/java-6-sun/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/var/lib/tomcat6.0/conf/logging.properties -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs=/usr/share/tomcat6.0/common/endorsed -classpath :/usr/lib/jvm/java-6-sun/jre//lib/jcert.jar:/usr/lib/jvm/java-6-sun/jre//lib/jnet.jar:/usr/lib/jvm/java-6-sun/jre//lib/jsse.jar:/usr/share/tomcat6.0/bin/bootstrap.jar:/usr/share/tomcat6.0/bin/commons-logging-api.jar -Dcatalina.base=/var/lib/tomcat6.0 -Dcatalina.home=/usr/share/tomcat6.0 -Djava.io.tmpdir=/var/lib/tomcat6.0/temp org.apache.catalina.startup.Bootstrap start

Брандмауэр:

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all      anywhere             anywhere            

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all      anywhere             anywhere 

Когда я пытаюсь подключиться из OSX, используя jvisualm: - добавление нового хоста с именем хоста моего vm (добавив его в / etc / hosts) - добавление нового JMX-соединения

Сбой VisualVM с:

Cannot connect using service:jmx:rmi///jndi/rmi://<vmhostname>:8086/jmxrmi

Когда я подключаюсь к своей виртуальной машине с помощью ssh -X и запускаю jvisualvm на той же машине, на которой работает tomcat, я первоначально не вижу TC, но яМожно добавить соединение JMX, как указано выше.

Может ли это быть проблемой, связанной с тем, что иностранным хостам загадочным образом запрещают доступ к секретарю?Зачем кому-то делать такие глупые поступки?

Что я делаю не так?

(извините за длинный пост)

Ответы [ 10 ]

5 голосов
/ 06 февраля 2012

Вот руководство по , как подключить Visual VM к Tomcat 7 .Это немного многословно, но должно помочь вам решить ряд проблем, с которыми сталкивается большинство людей.

3 голосов
/ 21 сентября 2010

Проверьте слушатель jmx на этой странице. http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html

Позволяет установить порт JMX и порт реестра RMI, оба из которых должны открываться на брандмауэре.

1 голос
/ 19 сентября 2014

Таким образом, вышесказанное сработало для меня:

service:jmx:rmi:///jndi/rmi://machinedomainname:1099/jmxrmi

Потратив на это 1/2 дня.Следуя обычным инструкциям и разочаровавшись, все вышеперечисленное взломало его.

У меня развернуто игровое приложение в amazon ec2 со следующими флагами:

 -Dcom.sun.management.jmxremote
   -Dcom.sun.management.jmxremote.port=<myport>
   -Dcom.sun.management.jmxremote.authenticate=false
   -Dcom.sun.management.jmxremote.ssl=false
   -Dcom.sun.management.jmxremote.local.only=false
   -Djava.rmi.server.hostname=<mymachinedomainname>

У меня на компьютере Mac работает jvisualvm локально,

Я добавил удаленный хост jvisualvm с именем хоста:

 <mymachinedomainname>

Затем добавил добавленное соединение jmx к этому хосту.Я попробовал рекомендованный

service:jmx:rmi://<mymachinedomainname>:<myport>

, но он просто не подключился.

Но как только я сделал

service:jmx:rmi:///jndi/rmi://<mymachinedomainname>:<myport>/jmxrmi 

вместо этого.это связано и работает.

Понятия не имею, почему!но это работает.

1 голос
/ 16 сентября 2011

Выполните следующие действия,

  • Загрузка установки jvisualvm из Загрузка Jvisualvm

  • Разархивируйте эту настройку и перейдите в каталог bin из командной строки

  • Используйте эту команду для запуска visualvm:

    \ bin> visualvm.exe -J-Dnetbeans.system_socks_proxy = localhost: 9998 -J-Djava.net.useSystemProxies = true

  • получите установку замазки, перейдите в каталог установки использования замазки, используя следующую команду для туннеля ssh к удаленной системе

putty -D 9998 -load Name_of_the_saved_putty_session

  • save_putty_session должен иметь туннель для localhost: JMX_port и some_source_port

  • теперь в visualvm UI на левой навигационной панели, щелкните правой кнопкой мыши на удаленном хосте и выберите «Добавить удаленный хост» с публичным ip удаленного хоста

  • Теперь на этом добавленном удаленном хосте щелкните правой кнопкой мыши и скажите «ADD JMX CONNECTION»

  • В окне подключения скажите localhost: source_port_provided_in_putty_tunnel

  • Нажмите на кнопку ОК, и все готово.

1 голос
/ 13 сентября 2011

Вы можете попытаться добавить фактический ip и имя хоста в / etc / hosts, где работает jstatd.

1 голос
/ 26 января 2011

Попробуйте добавить в catalina_opts: -Djava.rmi.server.hostname=vmhostname и убедитесь, что ваш Mac может разрешить это имя хоста, например, nc -v vmhostname 8086 должен успешно открыть соединение.

0 голосов
/ 31 декабря 2014

Я на самом деле только что решил эту проблему сам и понял это.

Держу пари, что проблема в подключениях RMI - вы не можете предсказать, какие порты он будет использовать, и поэтому вы не можете заставить его работать с брандмауэром.

Обходной путь должен использовать прокси SSH:

  1. SSH к коробке, где запущено ваше приложение, но используйте опцию -D, например:

    ssh user @ remoteHost -D 9999

    Это запустит прокси-сервер socks на вашем локальном компьютере через порт 9999.

  2. Откройте JVisualVM и в настройках в разделе «сеть» настройте его для использования прокси-сервера socks на локальном хосте, на порту 9999.

Если вы выполните вышеизложенное, то сможете подключиться к удаленной машине в обычном режиме, и, поскольку весь трафик RMI теперь проходит через прокси-сервер SSH, он пробивается через брандмауэр и работает нормально.

Удачи: -)

0 голосов
/ 14 ноября 2012

Я бы предложил использовать эту опцию:

-Dcom.sun.management.jmxremote.port=1099

Затем соединитесь с

service:jmx:rmi:///jndi/rmi://machinedomainname:1099/jmxrmi

Пока RMI прослушивает все интерфейсы (т. Е. 0.0.0.0), не должно быть проблем с подключением с удаленного сервера, пока брандмауэр выключен (или тщательно настроен).

0 голосов
/ 14 апреля 2010

Убедитесь, что на удаленной машине, которую вы хотите отслеживать, запущен процесс jstatd с необходимыми разрешениями.

0 голосов
/ 19 февраля 2010

Убедитесь, что вы можете

a) ping <vmhostname>
b) telnet <vmhostname> 8086

Обратите внимание, что вы можете использовать IP-адрес вместо <vmhostname>

...