VisualVM через ssh

Я читал Visual VM удаленно через ssh но я думаю, что я не полностью понял, потому что он не работал для меня :-( пожалуйста, кто-нибудь может привести пример?

ssh -D 9696 login@ip.of.external.machine и visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true запускает visualvm, но процессы внешней машины не отображаются (только локальные, такие как visualvm). Более того, иногда (но не всегда) я получал сообщение "channel 3: open failed: connect failed: Connection refused" в моем окне ssh.

помочь?

7 ответов


вам либо нужно запустить jstatd на удаленной стороне, либо указать соединение JMX с помощью host:port.

число jstatd:

jstatd -J-Djava.security.policy=permissions.txt [-p port]

после этого: добавьте удаленное соединение к целевой машине и в свойствах этого удаленного соединения настройте соединение jstatd.

(права.txt содержит например это:

grant {
  permission java.security.AllPermission;
};

Edit: (ответ на комментарий)

  1. ssh -D 9696 me@remote, и запустить jstatd, как указано выше, в удаленной командной строке. Если вы хотите, чтобы jstatd был на другом порту, чем 1099 по умолчанию, используйте аргумент-p для jstatd.
  2. выполнить visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true на локальном компьютере
  3. в visual vm: добавьте новое удаленное соединение и укажите remote как host и порт для jstatd (1099 по умолчанию или то, что вы указали с-p при запуске jstatd)

    теперь вы должны увидеть процессы на удаленной стороне в visualvm


У меня есть другое решение, используя стандартный SSH туннелирование и нет порты брандмауэра открыть. Для меня Socks proxy не работает.

запустите JVM с параметрами:
-протокол DCOM.солнце.управление.jmxremote=true
-протокол DCOM.солнце.управление.jmxremote.протокол SSL=ложь
-протокол DCOM.солнце.управление.jmxremote.authenticate=false
-протокол DCOM.солнце.управление.jmxremote.port=[порт 1]
- Дjava.РМО.сервер.имя=имя localhost
-протокол DCOM.солнце.управление.jmxremote.РМО.port=[порт2]

важной частью является "сервером.имя=имя localhost". Кроме того, вы явно определяете оба порта (connect + "случайный" порт RMI), "jmxremote.РМО.порт " нуждается, по крайней мере, в обновлении Java 7 4 (я где - то читал, не проверял эту информацию-используйте "lsof-i" на вашей серверной машине, чтобы проверить действительно используемые порты).

(конечно, вы можете использовать проверки подлинности и SSL.)

подключитесь через ssh к серверу и перешлите свой локальный port1 и port2 к localhost: port1 / 2 на сервере.

в VisualVM откройте соединение JMX с localhost: port1 (без настройки прокси).


у меня была проблема привязки jstatd к localhost, поэтому мне пришлось ввести

jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip>

также для jvisualvm я использую эти параметры вместо

jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port>

таким образом, подключаясь через прокси ssh, я мог бы использовать реальный ip-адрес моей удаленной машины.

кража из этого ответа я сделал себе полное напоминание о мой сайт .. я надеюсь, ты не против ankon Спасибо за это кстати :)


у меня была такая же проблема при подключении jVisualVM к удаленному приложению через ssh.

В Этом Уроке помог мне решить мою проблему. http://issamben.com/how-to-monitor-remote-jvm-over-ssh/

чтобы решить эту проблему, убедитесь:

  • вы устанавливаете два порта в конфигурации jvm

     -Dcom.sun.management.jmxremote.ssl=false 
     -Dcom.sun.management.jmxremote.authenticate=false 
     -Dcom.sun.management.jmxremote.port=9010
     -Dcom.sun.management.jmxremote.rmi.port=9011
     -Djava.rmi.server.hostname=localhost
     -Dcom.sun.management.jmxremote.local.only=false
    
  • SSH туннель правильно установлено

     ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011
    

Я также обнаружил, что аргументы JVM:

-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true

не работал над сборкой, которую я использую 1.3.2.

поэтому я использовал Инструменты > Параметры > Сеть и установил ее вручную в настройках SOCKS.

но VisualVM все еще не нашел удаленные процессы. Затем я удалил прослушивание localhost" no proxy hosts", так как это, вероятно, заблокировало его.


Я обнаружил, что в JVM аргументы для прокси не работают. По крайней мере, в версии 1.3.3 (build 111013). Настройка прокси-сервера в меню Сервис > Параметры > Сеть работала для меня. Также системные настройки прокси-сервера должны работать, хотя по определению это влияет на все другие сетевые подключения.


попробуйте другую версию jvisualvm (например, новейшую из https://visualvm.github.io/download.html)

Я не мог заставить его работать с jvisualvm, так как он не использовал прокси SOCKS (я не видел ничего, связанного с jvisualvm в ssh-v-D 9696). Удаленные приложения никогда не появлялись в jvisualvm. Однако VisualVM показал их через несколько секунд.