Tomcat 6, JMX и проблема динамического порта - PullRequest
11 голосов
/ 14 июня 2011

после прочтения и много попыток, я должен спросить, есть ли у кого-нибудь решение моей проблемы.

Я пытаюсь настроить некоторые Tomcats (V6) за брандмауэром. Это не страшно - но я хочу контролировать их через JMX.

Я прочитал документацию TC и наткнулся на JMXRemoteLifecycleListener . Моя тестовая установка TC настроена точно так, как указано в ссылке выше. Таким образом, я не получаю соединение от одного хоста в нашей сети к другому. Кроме того, третий случайный порт открыт каждый раз, когда я запускаю TC.

В моем server.xml слушатель активирован

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="8050" rmiServerPortPlatform="8060" />

catalina.out говорит, что все в порядке.

2011-06-14 16:46:48,819 [main] INFO org.apache.catalina.mbeans.JmxRemoteLifecycleListener-
The JMX Remote Listener has configured the registry on port 8050 and the server on port 8060 for the Platform server

Порты открыты, я могу подключиться к ним через telnet с любого другого хоста. Я могу подключиться к виртуальной машине локально с (service:jmx:rmi://<hostname>:8xxx/jndi/rmi://<hostname>:8xxxx/jmxrmi)

Вывод Netstats выглядит следующим образом:

tcp6       0      0 :::8080                 :::*                    LISTEN      11291/java
tcp6       0      0 :::8050                 :::*                    LISTEN      11291/java
tcp6       0      0 :::8060                 :::*                    LISTEN      11291/java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      11291/java
tcp6       0      0 :::60901                :::*                    LISTEN      11291/java
tcp6       0      0 127.0.0.1:8009          :::*                    LISTEN      11291/java

Tomcat даже запускается со всеми достаточными опциями VM

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=TRUE 
-Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access"

У кого-нибудь есть подсказка, почему я застрял здесь? Заранее спасибо!

Ответы [ 2 ]

14 голосов
/ 15 июня 2011

Ответом является -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx для общих параметров JMX.

Пример автоматической установки имени хоста:

IP=`ifconfig eth0  | grep 'inet '| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'``;

CATALINA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=TRUE
-Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access
-Djava.rmi.server.hostname=$IP"
1 голос
/ 25 мая 2016

Проблема, может быть, второй случайный порт, открытый самой java при включении мониторинга jmx.Начиная с Java 7, этот порт также можно установить:

-Dcom.sun.management.jmxremote.rmi.port=7091

Таким образом, в комбинации - можно использовать один и тот же порт:

-Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.rmi.port=7091

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

...