Подключение удаленного экземпляра tomcat JMX с помощью jConsole

Я пытаюсь подключиться к удаленному экземпляру JCX tomcat с помощью jConsole. Но нельзя подключиться успешно. Есть идеи?

Я включил следующий вариант в remote tomcat catalina.sh :

 JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=9004 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false" 

У меня была аналогичная, если не та же проблема. Я мог бы подключиться к серверу JMX, если бы я запускал jconsole локально на машине.

Кажется, сервер RMI не прослушивал правильный ip. Итак, как было предложено в этом связанном вопросе , я добавил следующее:

 -Djava.rmi.server.hostname= 

к JAVA_OPTS , а затем это сработало.

Я собрал информацию, распространяющуюся по сети, найденную с подсказками от других участников.

Большая боль, вызванная JMX, – это (imo) тот факт, что JMX открывает второй динамически выделенный сетевой порт. Брандмауэр (например, iptables) блокирует это.

Решение для tomcat на linux:

используйте tomcat 6.0.24 или более новую версию downloadina-jmx-remote.jar от apache tomcat extras (используйте страницу загрузки tomcat) скопируйте ее в $ CTALINA_HOME \ lib

Это позволяет вам устанавливать оба порта, используемые JMX

отредактируйте раздел сервера в файле server.xml

  ...  

установить некоторые переменные среды (например, в setenv.sh)

 CATALINA_OPTS=" -Djava.rmi.server.hostname=IP-TO-LISTEN -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false" 

это активирует управление доступом для JMX

jmxremote.access будет выглядеть так:

 monitorRole readonly controlRole readwrite 

end jmxremote.password будет

 monitorRole tomcat controlRole tomcat 

(просто простые пространства)

перезапустить tomcat.

Теперь настройте брандмауэр на сервере (например, iptables)

/ И т.д. / sysconfig / Iptables

 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9840 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9841 -j ACCEPT 

и / etc / sysconfig / ip6tables

 -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9840 -j ACCEPT -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9841 -j ACCEPT 

перезапустить iptables

Готово!

Теперь используйте VisualVM или JConsole на своей рабочей станции, чтобы установить соединение с rmiRegistryPortPlatform, 9840 в нашем примере.

Если между рабочей станцией и сервером больше нет брандмауэров, он должен работать.

Пробовал с Java 8

1. Добавьте это в свой сценарий запуска java tomcat:

 -Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.rmi.port=1616 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost 

например, добавьте в bin / setenv.sh это:

 export CATALINA_OPTS="$CATALINA_OPTS \ -Dcom.sun.management.jmxremote.port=1616 \ -Dcom.sun.management.jmxremote.rmi.port=1616 \ -Dcom.sun.management.jmxremote.local.only=true \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false " 

2. Выполните это на своем компьютере.

  • Пользователи Windows :

    putty.exe -ssh [email protected] -L 1616:remote-host:1616

  • Пользователи Linux и Mac :

    ssh [email protected] -L 1616:remote-host:1616

3. Запустите jconsole на компьютере

 jconsole localhost:1616 

4. Получайте удовольствие!

  • PS: во время шага 2 с помощью ssh и -L вы указываете, что порт 1616 на локальном (клиентском) хосте должен быть перенаправлен на удаленную сторону.
  • PS2 .: вы можете указать один и тот же порт для JMX и RMI-цепочек

какую строку вы используете в качестве URL-адреса соединения JMX. Я не хочу указывать на очевидное, но у JConsole есть ужасный интерфейс, и для меня требуется слишком сложный URL-адрес, прежде чем он подключится к удаленному jmx-приложению. Моя выглядит так:

 service:jmx:rmi:///jndi/rmi://(hostname):(jmxport)/jmxrmi 

Включить JMX в Tomcat8, успешно протестирован в моем POC

1 / Загрузите catalina-jmx-remote.jar с сайта apache и поместите его в $CATALINA_HOME/lib .

2 / Возьмите setenv.sh копию server.xml / setenv.sh . Внесите изменения в server.xml

  

3 / Внесите изменения в $CATALINA_BASE/bin/setenv.sh like –

 [...] JVM_OPTS="[...] -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=true -Djava.rmi.server.hostname=| <`hostname -i`> -Dcom.sun.management.jmxremote.password.file=/apps/data/apache-tomcat-8_8080/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/apps/data/apache-tomcat-8_8080/conf/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote=true " 

4 / Создайте эти два файла как – $touch $CATALINA_BASE/conf/jmxremote.password содержащий:

admin letmein

$touch $CATALINA_BASE/conf/jmxremote.access содержащий:

admin readwrite

 $ chmod 600 jmxremote.password 

5 / Перезапустить tomcat и тест на jconsole tool 🙂

 $echo|telnet 10.105.14.90 10001 

Что именно вы имеете в виду, когда говорите «Но не удается связаться успешно»? Есть ли сообщение об ошибке? Попробуйте включить ведение журнала в jconsole и посмотреть, помогает ли это его отладке.

Чтобы включить ведение журнала jconsole, отредактируйте файл с именем logging.properties в каталоге, в котором будет запущен jconsole, добавьте:

 handlers= java.util.logging.ConsoleHandler .level=INFO java.util.logging.FileHandler.pattern = %h/java%u.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter java.util.logging.ConsoleHandler.level = FINEST java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter javax.management.level=FINEST javax.management.remote.level=FINEST 

Затем запустите jconsole с помощью:

 jconsole -J-Djava.util.logging.config.file=logging.properties 

если вы работаете над linux, измените файл catalina.sh, добавив:

  CATALINA_OPTS="-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname= -Dcom.sun.management.jmxremote.port= -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" export CATALINA_OPTS 

или изменить файл / etc / profile как root и повторно запустить файл (источник / etc / profile)

если вы работаете над windowsми, и вы запускаете tomcat из командной строки, используйте переменную окружения CATALINA_OPTS

если вы работаете с windowsми, и вы запускаете tomcat в качестве службы, вам нужно будет использовать служебную программу монитора для настройки параметров инициализации службы (ни setenv.bat, catalina.bat, ни env-vars не будут работать). для этого вам понадобится имя службы, которое отображается в списке services.msc (например, jasperreportsTomcat). После этого вам нужно будет открыть консоль как администратор и выполнить (например): tomcat6w.exe // MS // jasperreportsTomcat

с этой командой появится значок в трее, где вы можете открыть панель. На вкладке «Java» теперь вы можете изменить параметры jmx. Будьте осторожны, чтобы не добавлять конечные пробелы и использовать символ «[enter]» для разделения каждой опции по строкам.

 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.61.101 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 

Надеюсь, поможет

Проверьте, находится ли ваш сервер за брандмауэром. JMX базируется на RMI, которые открывают два порта при его запуске. Один из них – это порт регистра, по умолчанию – 1099 и может быть указан параметром com.sun.management.jmxremote.port. Другая – для передачи данных и является случайной, что и является причиной проблемы. Хорошей новостью является то, что с JDK6 этот случайный порт может быть указан параметром com.sun.management.jmxremote.rmi.port.

добавьте строку в вас {tomcat_dir} /bin/setenv.sh:

 export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.rmi.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" 

У меня есть кое-что для всех вас, чтобы завершить исследование всего этого. Есть трюк, бывает, что инструмент профилировщика связан с jvm с помощью порта, но jvm продолжает разговор с использованием другого случайного порта. Если jvm запущен на удаленной машине (например, сервер веб-приложений tomcat), а удаленная машина имеет защиту от исходящих и входящих соединений, вы должны установить системное свойство java com.sun.management.jmxremote.rmi.port к тому же значению свойства com.sun.management.jmxremote.port

Источник: https://serverfault.com/questions/308662/how-do-i-fix-a-failed-to-retrieve-rmiserver-stub-jmx-error И также проверьте это: http: //blog.cantremember .com / отладки-с-JConsole-JMX-SSH-туннелей /

Надеюсь внести свой вклад!

И удачи!

Ну, у меня была эта проблема в Linux-ящике (виртуальная машина), и я исправил ее с использованием свойства -Djava.rmi.server.hostname, но я ничего не могу понять. Моя машина имеет 5 серверов tomcat, все из которых имеют jmx в последовательных портах (8008, 8018, 198028 …), и только одна из них связана с этой проблемой при подключении JMX. Нет брандмауэра, нет -Djava.rmi.server.hostname свойства в любом tomcat ….

Поэтому я понимаю проблему, но я не могу понять, почему 4 моих кота работали, а 1 из них – нет.

PD: Мой английский очень плохой, я знаю. Мои извинения.

PROTIP: вам необходимо исправить (как при наличии известного номера) RMI-реестр и порты сервера JMX / RMI. Вы делаете это, помещая jar-файл в lib-dir и настраивая специальный прослушиватель. (И, конечно же, обычные флаги для активации JMX

  -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=8999 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Djava.rmi.server.hostname= \ 

См. JMX Remote Lifecycle Listener по адресу http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html.

Изменение /etc/hosts в Linux, где я заменил адрес локального хоста, связанный с моей учетной записью, на машину ip, решил эту проблему для меня.

  • Почему мои изменения JSP не отражаются без перезапуска Tomcat?
  • Каталины. Прокачка с Tomcat 6.0
  • Драйвер JDBC MySQL 5.1.33 - Проблема с часовым поясом
  • Как установить JSTL? Абсолютный uri: http://java.sun.com/jsp/jstl/core не может быть разрешен
  • Как установить контекстный путь веб-приложения в Tomcat 7.0
  • Исправление адреса Bind в Tomcat
  • SQLException: не найдено подходящего драйвера
  • Как настроить параметры памяти Tomcat 5.5 JVM без использования программы конфигурации
  • JSP для создания таблицы Excel (XLS) для загрузки
  • Самый простой способ обслуживания статических данных вне сервера приложений в веб-приложении Java
  • Фильтр Tomcat CORS
  • Давайте будем гением компьютера.