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

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

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

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

2 ответа

Решение

Вместо того чтобы создавать правило брандмауэра каждый раз, когда я запускаю 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 login_name@host_name

ssh -L 55663:localhost:55663 login_name@host_name

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

Посмотрите это " Запуск VisualVM через туннель ssh с SOCKS" для другого решения.

Другие вопросы по тегам