Вопрос

Я читал Удаленная виртуальная машина Visual через 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).Более того, иногда (но не всегда) Я получал сообщение "канал 3:открыть не удалось:сбой подключения:Отказано в подключении" в моем окне ssh.

Какая-нибудь помощь?

Это было полезно?

Решение

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

Jstatd:

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

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

(permissions.txt содержит, например, следующее:

grant {
  permission java.security.AllPermission;
};

Редактировать: (Ответ на комментарий)

  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. в визуальной виртуальной машине:добавьте новое удаленное подключение и укажите remote в качестве хоста и порт для jstatd (1099 по умолчанию или тот, который вы указали с помощью -p при запуске jstatd).

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

Другие советы

У меня есть другое решение, использующее стандартное SSH-туннелирование и нет портов брандмауэра чтобы открыться.У меня SOCKS proxy не работает.

Запустите свою JVM с опциями:
-Dcom.sun.management.jmxremote=истина
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=ложь
-Dcom.sun.management.jmxremote.port=[порт1]
-Djava.rmi.server.hostname=локальный хост
-Dcom.sun.management.jmxremote.rmi.port=[порт2]

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

(Конечно, вы можете использовать аутентификацию или SSL.)

Подключитесь по ssh к серверу и перешлите свой локальный порт1 и порт2 для локального хостинга: порт1|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-адрес моей удаленной машины.

Похищая этот ответ, я полностью напомнил себе о моем сайте . .. я надеюсь ты не против анкон Кстати, спасибо за это:)

У меня возникла такая же проблема при подключении 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, поскольку это, вероятно, заблокировало его.

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

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

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

Я знаю, что этот вопрос старый, но я предлагаю более простое решение вместо использования jstat.

просто используйте только SSH и Jvisualvm

<Ол>
  • ssh с sockproxy (ex ssh -D 6666 host@123.123.123.123)
  • запустить jvisualvm с носком (jvisualvm.exe -J-DsocksProxyHost = localhost -J-DsocksProxyPort = 6666)
  • добавить хост JXM (например: 234.234.234.234:16000)
  • Используйте jvisualvm простой способ обнаружить утечку памяти и контролировать ЦП, ОЗУ приложения

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top