Как найти номер порта JMX по умолчанию?

Я запускаю приложение Java на виртуальной машине Java 6 на удаленной Windows XP, на которой я могу запустить jvisualvm.exe для автоматического подключения к запущенному приложению.

Теперь мне нужно подключить это приложение с моего локального компьютера, но я не знаю номер порта JMX удаленного компьютера. Где я могу найти его? Или я должен перезапустить это приложение с некоторыми параметрами виртуальной машины, чтобы указать номер порта?

После прочтения вопроса Как найти порт JMX на сервере, я выполнил команду на удаленном компьютере

netstat -apn

но ничего не получил.


person chance    schedule 26.04.2012    source источник
comment
возможный дубликат Как активировать JMX на моей JVM для доступа через jconsole?   -  person artbristol    schedule 26.04.2012


Ответы (1)


Теперь мне нужно подключить это приложение с моего локального компьютера, но я не знаю номер порта JMX удаленного компьютера. Где я могу найти его? Или я должен перезапустить это приложение с некоторыми параметрами виртуальной машины, чтобы указать номер порта?

По умолчанию JMX не публикует порт, если вы не укажете аргументы с этой страницы: Как активировать JMX ...

-Dcom.sun.management.jmxremote # no longer required for JDK6
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=false # careful with security implications
-Dcom.sun.management.jmxremote.authenticate=false # careful with security implications

Если вы работаете, у вас должна быть возможность получить доступ к любому из этих системных свойств, чтобы узнать, установлены ли они:

if (System.getProperty("com.sun.management.jmxremote") == null) {
    System.out.println("JMX remote is disabled");
} else [
    String portString = System.getProperty("com.sun.management.jmxremote.port");
    if (portString != null) {
        System.out.println("JMX running on port "
            + Integer.parseInt(portString));
    }
}

В зависимости от того, как подключен сервер, вам также может потребоваться указать следующий параметр. Как часть начального соединения JMX, jconsole подключается к порту RMI, чтобы определить, на каком порту работает сервер JMX. Когда вы первоначально запускаете приложение с поддержкой JMX, оно ищет свое собственное имя хоста, чтобы определить, какой адрес вернуть в этой начальной транзакции RMI. Если ваше имя хоста не находится в /etc/hosts или если для него задан неправильный адрес интерфейса, вы можете переопределить его следующим образом:

-Djava.rmi.server.hostname=<IP address>

Кстати, мой пакет SimpleJMX позволяет вам определять как сервер JMX и порт RMI или установить они оба в один и тот же порт. Вышеупомянутый порт, определенный с помощью com.sun.management.jmxremote.port, на самом деле является портом RMI. Это сообщает клиенту, на каком порту работает сервер JMX.

person Gray    schedule 28.04.2012
comment
Вы пропустили -Dcom.sun.management.jmxremote.ssl=false и -Djava.rmi.server.hostname=<IP address> - person Claudio; 02.08.2016
comment
Ни то, ни другое не требуется от @Claudio как минимум до Java 7. - person Gray; 02.08.2016
comment
Не по моему опыту. Я использую Java 7 в Linux CentOS 6. Я нашел ваш ответ, и он не сработал. К счастью, вы также предоставили ссылку на исходный ответ и добавили эти флаги, и он начал работать. Не знаю, какой из них действительно нужен и почему. - person Claudio; 02.08.2016
comment
Если вы используете Wildfly, проконсультируйтесь; docs.jboss.org/author/display/WFLY10/ - person Koekiebox; 20.05.2017