Использование 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" для другого решения.