У нас возникла проблема подключения к нашим Java-приложениям, работающим в кластере Amazon EC2. Мы определенно допустили как "порт JMX" (который обычно является портом реестра RMI), так и порт сервера (который выполняет большую часть работы) для группы безопасности для рассматриваемых экземпляров. Jconsole подключается, но, кажется, висит и никогда не показывает никакой информации.
Мы запускаем нашу java с чем-то вроде следующего:
java -server -jar foo.jar other parameters here > java.log 2>&1
Мы попытались:
- Telnets для подключения портов, но информация не отображается.
- Мы можем запустить
jconsole
в самом экземпляре, используя remote-X11 поверх ssh, и он соединяет и показывает информацию. Таким образом, JRE экспортирует его локально. - Открытие всех портов в группе безопасности. Weeee.
- Использование
tcpdump
, чтобы убедиться, что трафик не идет на другие порты. - Имитация локально. Мы всегда можем подключаться к нашим локальным JRE или тем, которые работают в другом месте в нашей сети, используя те же параметры приложения.
java -version
выходы:
OpenJDK Runtime Environment (IcedTea6 1.11.5) (amazon-53.1.11.5.47.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
В качестве альтернативы мы используем мой Simple JMX, который позволяет нам устанавливать как реестр RMI, так и серверные порты, которые, как правило, случайно выбранный реестром RMI. Вы также можете сделать это с помощью следующего JMX URI:
service:jmx:rmi://localhost:" + serverPort + "/jndi/rmi://:" + registryPort + "/jmxrmi"
В настоящее время мы используем один и тот же порт для сервера и реестра. Раньше мы использовали X
как реестр-порт и X+1
для сервера-порта, чтобы упростить правила группы безопасности. Вы подключаетесь к реестровому порту в jconsole
или другом клиенте JMX, который вы используете.