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

Вот как вы могли бы легко это сделать.

  1. Запустите ejstatd на вашем удаленном хосте следующим образом (выполняя из папки ejstatd): mvn exec:java -Dexec.args="-pr 2000 -ph 2001 -pv 2002"
  2. Откройте эти 3 порта на вашем удаленном хосте и сделайте их доступными для вашего локального компьютера: 2000, 2001 а также 2002
  3. На вашем локальном компьютере вы сможете использовать jps замена <remotehost> с вашим именем удаленного хоста: jps -m -l rmi://<remotehost>:2000

Отказ от ответственности: я являюсь автором инструмента ejstatd с открытым исходным кодом

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