2010-02-19 5 views
9

Если проверены другие вопросы по этой проблеме, но до сих пор нет ни одной записи. Вот моя настройка: TC6 работает на debian vm на моей macbook. в /etc/default/tomcat6.0 я следующие варианты: наборВсе еще не удается подключить Tomcat 6 удаленно через VisualVM

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 

Firewall:

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 usin г jvisualm: - добавление нового хоста с именем хоста моей виртуальной машины (добавить его в/и т.д./хостов) - добавление нового JMX-подключения

VisualVM терпит неудачу с:

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

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

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

Что я делаю неправильно?

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

+4

RMI открывает другие, динамические порты, а также (и подключение JMX по умолчанию использует RMI). Это затрудняет туннель и правильную настройку брандмауэра. В принципе, он никогда не предназначался для работы в любом месте, кроме широко открытой сети. Поскольку я не могу дать никаких конкретных подробностей, я просто написал этот комментарий. –

+0

Спасибо, Иоахим. На самом деле брандмауэр - это то, что меня озадачивает. Поскольку он работает на виртуальной машине на моем локальном компьютере, я полностью отключил брандмауэр, см. Выше (ПРИНИМАЕТ ВСЕ). Вы указываете, что использование rmi является значением по умолчанию. Есть ли у вас какие-либо другие идеи, как контролировать удаленный tomcat с помощью visualvm? – er4z0r

+0

спасибо @JoachimSauer, который решил мою проблему – austin

ответ

0

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

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

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

+0

VM встал, и я могу подключиться. Нет подсказки :( Просто попробовал jconsole, что тоже не удается. – er4z0r

+0

Это значит, что вы можете подключиться к порту 8086 с Mac OS X на вашу виртуальную машину? Я не удивлен, что jconsole не работает. Оба VisualVM и jconsole используют тот же код для подключения JMX. Вы можете попробовать запустить tcpdump на своей виртуальной машине и посмотреть, есть ли какая-либо связь на порту 8086. О, и я только что заметил tcp6 - это значит, что вы используете IPv6? Если это так, это может быть причина, почему вы не можете подключиться к Tomcat. –

+0

Спасибо. Я посмотрю, смогу ли я каким-либо образом обернуть его в ipv4. – er4z0r

0

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

3

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

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

+2

Это почти решило мою проблему, большое и короткое сообщение. Будьте осторожны, чтобы проверить имя хоста RMI, на многих серверах внешний ip не известен себе, поэтому RMI связывается только с каким-то локальным адресом. +1 – Jan

1

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

1

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

1

Следуйте этим шагам,

  • Скачать настройки jvisualvm из Download Jvisualvm

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

  • Используйте эту команду, чтобы запустить VisualVM:

    \ bin> visualvm.exe -J-Dnetbeans.system_socks_proxy = localhost: 9998 -J-Djava.net.useSyst emProxies = истинный

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

шпатлевка -D 9998 -load Name_of_the_saved_putty_session

  • saved_putty_session должен иметь туннель к локальному хосту: JMX_port и some_source_port

  • сейчас в visualvm UI в левом навигационном, righ т нажмите на пульте дистанционного управления и «Добавить удаленный узел», с публичным IP удаленного хоста

  • Теперь на этом добавил удаленный узел правой кнопкой мыши и сказать «ADD JMX СОЕДИНЕНИЕ»

  • В соединительной коробке сказать локальный: source_port_provided_in_putty_tunnel

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

5

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

+0

+1, это сработало для меня. Разница между конфигурацией исходного вопроса и конфигурацией, которая работала для меня, это этот флаг: -Djava.rmi.server.hostname = 50.112.22.47 " – DuffJ

0

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

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

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

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

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

1

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

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> 

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

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

<mymachinedomainname> 

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

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

, но это было бы просто не подключить.

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

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

вместо этого. он подключен и работает.

Не знаю, почему! но он работает.

0

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

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

Обойти является использование SSH прокси:

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

    SSH пользователь @ RemoteHOST -D 9999

    Это запустит сокс на локальной машине на порту 9999.

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

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

Удачи :-)

 Смежные вопросы

  • Нет связанных вопросов^_^