Использование VisualVM для подключения к удаленному экземпляру jstatd через брандмауэр

Возможный дубликат:
VisualVM через ssh

Я пишу этот вопрос и отвечаю на него, потому что я потратил несколько часов на то, чтобы это работало сегодня, и никакой ответ, который я нашел здесь, не работал у меня. Надеюсь, это поможет другим. Если у вас есть другое решение, кроме того, которое я использовал, пожалуйста, не стесняйтесь отвечать на этот вопрос. Если ваш лучше, я соглашусь вместо вас.

Проблема: я пытаюсь контролировать некоторые домашние приложения Java на моем сервере FreeBSD (это также должно применяться к серверам Linux) с использованием VisualVM и jstatd, но я не могу заставить VisualVM перечислять процессы на сервере даже после того, как я переадресовал назначенные и случайные порты jstatd в своем брандмауэре и вижу соединение, которое создается с помощью sockstat.

Ответы

Ответ 1

Вместо создания правила брандмауэра каждый раз, когда я запускаю jstatd (потому что он досадно выбирает новый случайный порт каждый раз), я получил его для работы с туннелями SSH.

Сначала я запустил jstatd на сервере, чтобы найти, какие порты мне нужны для туннелирования. Это делается (в моем случае), сначала создавая файл политики, называемый tools.policy со следующим содержимым:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

Затем выполните следующую команду: jstatd -J-Djava.security.policy=tools.policy

Затем я определил случайный порт, который использовался jstatd, запустив sockstat | grep jstat (может потребоваться использовать netstat вместо этого в Linux, я не уверен).

Тогда скажем, что случайный порт 55663, я создал два туннеля SSH на моей локальной машине, один для стандартного порта jstatd 1099, а другой для 55663, выполнив следующие команды в двух терминальных окнах (не сделал этого на Windows, но я уверен, что замазка может это сделать):

ssh -L 1099:localhost:1099 [email protected]_name

ssh -L 55663:localhost:55663 [email protected]_name

Как только два туннеля были открыты, я открыл VisualVM и щелкнул правой кнопкой мыши на "Локальном" компьютере с левой стороны и выбрал "Добавить соединение jstatd". Я нажал кнопку "Добавить по умолчанию" справа и убедился, что для порта установлено значение 1099. Я нажал кнопку "ОК", чтобы сохранить его, и сразу увидел, что мои удаленные процессы Java отображаются в разделе "Локальный".