JPS не может подключиться к удаленному JSTATD - PullRequest
12 голосов
/ 01 февраля 2011

Я пытаюсь запросить удаленную JVM с помощью jps с помощью jstatd, чтобы в конечном итоге отслеживать его с помощью VisualVM.

Я запустил jstatd со следующей политикой безопасности:

grant codebase "file:${java.home}/../lib/tools.jar" {

    permission java.security.AllPermission;
};

jstatd работает на 64-битной Linux-системе с версией 1.6.0_10 HotSpot vm. Команда 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 ]

13 голосов
/ 01 февраля 2011

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

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

# netstat -nap | grep jstatd

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

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

0 голосов
/ 03 ноября 2016

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

  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 tool

...