Ответ 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 отображаются в разделе "Локальный".