Извините за этот вопрос, который, должно быть, задавали много раз, но я не могу решить свою проблему. Я прочитал много блогов, сайтов, форумов, .... и не нашел решения в моем случае.
Случай: мне нужно подключить 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.
Пожалуйста, помогите мне, я схожу с ума!