Как удаленно подключиться к jmx на tomcat, используя ssh туннелирование и не прерывать ehcache - PullRequest
7 голосов
/ 06 мая 2010

Я следовал инструкциям в следующей ссылке, чтобы создать свой собственный реестр RMI и сервер jmx на одном порту внутри tomcat.Согласно комментариям, мне нужно установить -Djava.rmi.server.hostname = localhost.После того, как я это сделаю, я действительно смогу подключиться к своему серверу через jconsole, используя переадресацию порта ssh.

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

Однако я обнаружил, что это имеет очень плохой побочный эффект - сломать нашРепликация ehcache, которая использует RMI.Он не может жаловаться, что не может загрузиться с удаленного однорангового локального хоста.Я предполагаю, потому что у всех пиров их имя хоста сервера rmi установлено в localhost из -Djava.rmi.server.hostname = localhost.

У кого-нибудь есть возможное решение этой проблемы?

Ответы [ 3 ]

1 голос
/ 05 июня 2010

Если вы ищете простую в использовании альтернативу удаленного взаимодействия JMX с брандмауэром, jmx4perl стоит попробовать.Это агентный подход, который экспортирует JMX MBeans через HTTP / Rest.

Хотя его основное внимание направлено на использование в среде сценариев (например, perl) для целей мониторинга, для запланированной версии 0.70 добавлена ​​клиентская библиотека Java (бета-качество)

1 голос
/ 01 февраля 2011

извините, но мой первый ответ был неверным. Но я думаю, что с tomcat6 у вас есть опция с JmxRemoteLifecycleListener:

public boolean getUseLocalPorts()

Get the flag that indicates that local ports should be used for all
connections. If using SSH tunnels, or
similar, this should be set to true to
ensure the RMI client uses the tunnel.

http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.html

1 голос
/ 19 мая 2010

Я только что столкнулся с проблемой.Проблема в том, что свойство java.rmi.servername.hostname является глобальным.Чтобы ehcache и сервер jmx играли в гармонии, вы должны выполнить несколько хаков на компьютере, на котором работает VisualVM.

Вот что вам нужно сделать.Это основано на использовании Mac для клиента, поэтому измените команды по мере необходимости.

  1. Удалите -Djava.rmi.server.hostname = localhost.

  2. Напишите приложение-тестер, которое даст вам значение InetAddress.getLocalHost (). GetHostAddress () на вашем сервере, который вы хотите профилировать.Это должно дать вам локальный IP (private, если nat'd).Вам нужно будет обратиться к этому IP на вашем локальном компьютере.Используйте этот IP-адрес, где в приведенных ниже командах указано IP.

  3. Теперь это самое интересное: добавьте внутренний IP-адрес в интерфейс обратной связи на вашем компьютере.(ifconfig lo0 IP netmask 255.255.255.0 up)

  4. Проверьте, что это фактически направит трафик к обратной петле.Он должен вернуть петлю.(маршрут получения IP)

  5. Инициирование туннеля SSH: ssh -C -L IP: ПОРТ: localhost: ПОРТ -L IP: OTHER_PORT: localhost: OTHER_PORT user @ host.

Обратите внимание, что IP-адреса для ssh-туннеля на самом деле являются теми, которые теперь привязаны к петлевой проверке.Вы больше не ссылаетесь на localhost, но IP-адрес машины для всего.Вам также придется изменить свой URL JMX, чтобы он ссылался на этот IP вместо localhost.

...