Извините за этот вопрос, который, должно быть, задавался много раз, но мне не удалось решить мою проблему.
Я прочитал много блогов, сайтов, форумов, .... и не нашел решения в моем случае.
Корпус:
Мне нужно подключить VisualVM на моем компьютере к удаленным серверам (tomcats, weblogics) для мониторинга производительности / потоков / памяти.
Эти серверы установлены на (физических или виртуальных) машинах, которые защищены брандмауэром.
Большие интервалы портов открыты в брандмауэре и могут использоваться, но не для всех портов.
Тесты
- Я пробовал прямые соединения через JMX в VisualVM, используя следующие опции JVM на стороне сервера при запуске сервера:
-Djava.rmi.server.hostname=[hostname]
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=[port]
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
Я уточнил имя хоста, поскольку в моей сети имя хоста и IP-адрес сервера не совпадают с теми, которые указаны в сети удаленного сервера.
Не удалось, VisualVM всегда ищет неизвестный сервер.
попытался запустить jstatd на стороне сервера для порта, доступного (опция -p) из моего ящика (telnet на этом порту работает), но при запуске visualVM на этом хосте с портом jstatd он все еще выглядит ожидающим для чего-то недостижимого .... Такое же поведение при подключении jps к этому удаленному хосту.
попытался использовать те же инструменты на сервере с меньшей защитой сети, и это работает. Итак, я видел соединения между моей коробкой и сервером, и они выполняются на портах, отличных от того, что я указал для jstatd.
Я понимаю, что этот порт необходим для первого соединения (типа рукопожатия), и реальный обмен данными осуществляется через другие порты, но не предсказуем (например, 60305, 55197, ...).
Не уверен, что я очень хорошо понимаю, как работает RMI.
Пожалуйста, помогите мне, я схожу с ума!