JPS не может подключиться к удаленному JSTATD
Я пытаюсь запросить удаленную JVM с помощью jps с помощью jstatd, чтобы в конечном итоге контролировать его с помощью VisualVM.
Я запустил jstatd со следующей политикой безопасности:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
jstatd работает на 64-битном Linux-компьютере с версией HotSpot vm 1.6.0_10. Команда jstatd:
jstatd -J-Djava.security.policy=jstatd.tools.policy -J-Djava.rmi.server.logCalls=true
Я пытаюсь запустить JPS с компьютера с Windows 7. Из-за ограничений брандмауэра я туннелирую данные RMI через SSH-туннель на мой компьютер с Windows, так что командная строка jps:
.\jps.exe -m -l rmi://localhost
Когда я запускаю jps, я вижу попытку подключения в журнале jstatd, который выглядит так:
Feb 1, 2011 11:50:34 AM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(ja va.lang.String)]
но на стороне jps я получаю следующую ошибку:
Error communicating with remote host: Connection refused to host: 192.168.1.137; nested exception is:
java.net.ConnectException: Connection refused: connect
Основываясь на попытке подключения, указанной в журнале jstatd, я думаю, что jps на самом деле достигает хоста, но по какой-то причине блокируется. Есть ли какая-то политика безопасности, которую я установил, или какая-то другая настройка, которую я могу изменить, чтобы я мог заставить jps получать статистику с удаленного jstatd?
2 ответа
Я предполагаю, что вы только перенаправляете порт реестра RMI (1099), но вам также нужно открыть другой порт.
Проверьте, какие порты на удаленной стороне
# netstat -nap | grep jstatd
tcp 0 0 :::1099 :::* LISTEN 453/jstatd
tcp 0 0 :::58204 :::* LISTEN 453/jstatd
В этом случае вам нужно будет перенаправить порт 58204, а также 1099
Вот как вы могли бы легко это сделать.
- Запустите ejstatd на вашем удаленном хосте следующим образом (выполняя из папки ejstatd):
mvn exec:java -Dexec.args="-pr 2000 -ph 2001 -pv 2002"
- Откройте эти 3 порта на вашем удаленном хосте и сделайте их доступными для вашего локального компьютера:
2000
,2001
а также2002
- На вашем локальном компьютере вы сможете использовать
jps
замена<remotehost>
с вашим именем удаленного хоста:jps -m -l rmi://<remotehost>:2000
Отказ от ответственности: я являюсь автором инструмента ejstatd с открытым исходным кодом