Назад | Перейти на главную страницу

JMX-соединение с Tomcat на Amazon EC2

Мой процесс Tomcat 7, который я запускаю на сервере в Amazon EC2, имеет такие настройки, как эти в CATALINA_OPTS который должен позвольте мне подключиться для удаленного мониторинга JMX:

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

Тем не мение, удаленное подключение не работает ни с jconsole, ни с jvisualvm. Это просто время ожидания.

Я трижды проверил, что группа безопасности EC2 разрешает доступ к удаленному порту JMX с моего IP (и только с моего IP).

Не хватает каких-то настроек?

Если у вас возникли проблемы с установкой правильного имени хоста для java.rmi.server.hostname попробуйте следующее:

-Djava.rmi.server.hostname=$(/usr/bin/curl -s --connect-timeout 2 instance-data.ec2.internal/latest/meta-data/public-hostname)

Это удобно использовать в среде Elastic Beanstalk, где экземпляры будут приходить и уходить.

Вот более полное объяснение того, как это сделать, не вмешиваясь в групповую безопасность (она же брандмауэр):

На стороне сервера:

  1. скачать http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.23/bin/extras/catalina-jmx-remote.jar и поместите его в tomcat / lib
  2. добавить в server.xml следующего слушателя:

    <listener classname="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
        rmiregistryportplatform="10001" 
        rmiserverportplatform="10002" 
        uselocalports="true" />
    
  3. добавьте следующие настройки в tomcat / bin / setenv.sh:

CATALINA_OPTS="-Dcom.sun.management.jmxremote \
 -Dcom.sun.management.jmxremote.ssl=false \
 -Dcom.sun.management.jmxremote.authenticate=false"
export CATALINA_OPTS 

Перезапустить кота

Сторона клиента:

  1. загрузите тот же файл catalina-jmx-remote.jar и поместите его в JDK / JRE / lib / ext (тот же файл, что был загружен на шаге 1 сервера)
  2. запустить туннель ssh с помощью:

    Пользователь ssh @ aws-host -L10001: 127.0.0.1: 10001 -L10002: 127.0.0.1: 10002

  3. Запустите JConsole и введите следующий URL-адрес удаленной службы:

    служба: jmx: rmi: //127.0.0.1: 10002 / jndi / rmi: //127.0.0.1: 10001 / jmxrmi

У вас есть JConsole, подключенная через SSH к вашему tomcat, работающему на AWS.

Как размещено: http://www.cod.ro/2012/08/monitoring-tomcat-7-on-rhel-aws-using.html

Укажите java.rmi.server.hostname вариант тоже, так что он указывает на публичное DNS-имя вашего сервера EC2:

-Djava.rmi.server.hostname=your.public.dns

Этого было достаточно, чтобы заставить его работать для меня, но для получения дополнительных советов попробуйте это сообщение в блоге:
Мониторинг JMX в Amazon EC2

Я также пробовал использовать JmxRemoteLifecycleListener, и у меня это не сработало.

Вот что у меня сработало:

  1. Я выбираю 1005 в качестве порта JMX и мой setenve.sh как:

    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10005 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost"
    
  2. Перенаправить с помощью SSH на порт JMX и RMI

  3. Запустите visualvm, используя следующий URI:

    service:jmx:rmi:///jndi/rmi://localhost:10005/jmxrmi
    

Если вам нужна дополнительная информация, посмотрите этот пост: http://ignaciosuay.com/how-to-connect-a-java-profiler-like-visualvm-or-jconsole-to-a-remote-tomcat-running-on-amazon-ec2/