Подтвердить что ты не робот

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?

4b9b3361

Ответ 1

Я предполагаю, что вы только пересылаете порт реестра RMI (1099), но вам также нужно открыть другой порт.

Проверьте, какие порты на удаленной стороне

# netstat -nap | grep jstatd

tcp        0      0 :::1099     :::*       LISTEN      453/jstatd          
tcp        0      0 :::58204    :::*       LISTEN      453/jstatd          

В этом случае вам нужно будет переслать порт 58204, а также 1099

Ответ 2

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

  • Запустите 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 tool