Мониторинг удаленной JVM с помощью Java Mission Profiler

У меня проблемы с доступом к JVM на сервере Ubuntu (14.04.1 LTS) из Java Mission Control, работающего на OSX 10.10.2

Я прочитал этот вопрос: Как использовать Java Mission Control для мониторинга JVM на удаленном сервере? и мне это не помогает.

Я пытаюсь получить доступ к серверу через Интернет, и для TCP и UDP порта 7091 на маршрутизаторе включена переадресация портов, указывающая на локальный интерфейс сервера. Эта переадресация портов работает для других служб, поэтому я почти уверен, что в этой части нет ничего плохого.

Версия Java на сервере:

java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

Я запускаю JVM на сервере так:

java -Xms2048M -Xmx4096M 
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=7091 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.registry.ssl=false 
com.example.MyServer 
-arg1 XXX
-arg2 YYY
-arg3 ZZZ

(Я много играл с разными аргументами -Dcom.sun.management ..., и это последняя попытка)

В OSX моя версия Java:

java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

Mission Control - версия 5.3.0

I do

File - Connect - Create a new connection
enter Host: DNS name of remote router <I know this is correct>
Port: 7091

Когда я делаю «Тестовое соединение», время ожидания истекает с ошибкой.

(Я открыл порт 7091 на сервере, используя: "sudo ufw allow 7091". Нужно ли мне открывать какие-либо другие порты?)

Как действовать???


person Peter Andersson    schedule 24.03.2015    source источник


Ответы (2)


Это может помочь установить -Djava.rmi.server.hostname =

Вам не нужно явно указывать -Dcom.sun.management.jmxremote.rmi.port = 7091, по умолчанию он должен быть таким же, как com.sun.management.jmxremote.port, но просто чтобы убедиться, что вы также можете установить это ...

person Klara    schedule 25.03.2015
comment
Я уже пробовал добавить -Djava.rmi.server.hostname = 192.168.0.100. Я также убедился, что имя хоста -I вернуло 192.168.0.100, имя хоста -i вернет 127.0.0.1 192.168.0.100, а имя хоста -f вернет альфа-srv-01. Все еще не работает. - person Peter Andersson; 25.03.2015
comment
Оказалось, что вы были правы (в каком-то смысле), но решающим моментом было то, что это должен быть внешний интерфейс маршрутизатора, а не сервера. - person Peter Andersson; 26.03.2015

Наконец-то я нашел правильную конфигурацию:

$javabin -Xms2048M -Xmx4096M $GCLOG \
 -XX:+UnlockCommercialFeatures   \
 -XX:+FlightRecorder  \
 -Djava.rmi.server.hostname=myhost.example.com \
 -Dcom.sun.management.jmxremote=true \
 -Dcom.sun.management.jmxremote.port=7091 \
 -Dcom.sun.management.jmxremote.rmi.port=7091 \
 -Dcom.sun.management.jmxremote.authenticate=false \
 -Dcom.sun.management.jmxremote.ssl=false \
 -Djava.net.preferIPv4Stack=true \
  com.example.MyServer -arg1 XXX -arg2 YYY -arg3 ZZZ

Важной частью была часть java.rmi.server.hostname = myhost.example.com, где myhost.example.com должен разрешаться во внешний интерфейс вашего маршрутизатора.

Кроме того, имея

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

.. Мне нужно только перенаправить этот порт в маршрутизаторе.

Я не уверен, что предпочитаемый IPv4 важен, но сейчас мне все равно, он работает !!!

person Peter Andersson    schedule 26.03.2015