Мой процесс 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, где экземпляры будут приходить и уходить.
Вот более полное объяснение того, как это сделать, не вмешиваясь в групповую безопасность (она же брандмауэр):
добавить в server.xml следующего слушателя:
<listener classname="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiregistryportplatform="10001" rmiserverportplatform="10002" uselocalports="true" />
добавьте следующие настройки в 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
Перезапустить кота
запустить туннель ssh с помощью:
Пользователь ssh @ aws-host -L10001: 127.0.0.1: 10001 -L10002: 127.0.0.1: 10002
Запустите 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, и у меня это не сработало.
Вот что у меня сработало:
Я выбираю 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"
Перенаправить с помощью SSH на порт JMX и RMI
Запустите 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/