Helpers - компьютеры, интернет, программирование

VisualVM по ssh

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

ssh -D 9696 [email protected] и visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true запускает visualvm, но процессы внешней машины не отображаются (только локальные, такие как сам visualvm). Более того, иногда (но не всегда) я получал сообщение «канал 3: ошибка открытия: ошибка подключения: отказ в соединении» в моем окне ssh.

Любая помощь?

22.10.2009

  • Разве вам не нужно подключаться к удаленному хосту из VisualVM? У меня сейчас нет машины для тестирования, но вы только создали прокси-сервер socks, вам еще нужно что-то с ним сделать. 23.10.2009
  • Спасибо за ваш комментарий - я пробовал несколько «вариантов», но ни один из них не работал. 23.10.2009
  • С 2015 года вы можете туннелировать порты jmx и rmi, см. мой ответ 06.09.2015

Ответы:


1

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

Статд:

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

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

26.10.2009
  • Извините, но я не понимаю. Я могу запустить строку jstatd на удаленной стороне, но нужно ли мне идти туда с помощью ssh -D 9696 me@remote или достаточно ssh me@remote? Мне все еще нужны прокси для visualvm и так далее. Это смущает, но я думаю, что мне нужно пошаговое руководство. 28.10.2009
  • 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: добавьте новое удаленное соединение и укажите удаленный в качестве хоста и порт для jstatd (1099 по умолчанию или то, что вы указали с -p при запуске jstatd) Теперь вы должны увидеть процессы на удаленной стороне в visualvm 28.10.2009
  • Я пробовал это, но не повезло. Что именно вы ставите в качестве удаленного хоста? Обычно вам нужен «localhost» (по отношению к прокси-серверу), но VisualVM жалуется, что Local уже отслеживается. Я попробовал внутренние и внешние IP-адреса целевого хоста, но не вижу никаких процессов. 19.07.2011
  • @Yang работал у меня с внутренним IP-адресом целевого хоста. 27.11.2012

  • 2

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

    Запустите JVM с параметрами:
    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false< br> -Dcom.sun.management.jmxremote.port=[порт1]
    -Djava.rmi.server.hostname=localhost
    -Dcom. sun.management.jmxremote.rmi.port=[port2]

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

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

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

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

    02.07.2015
  • Отличная информация ... это решило это для меня с помощью туннелирования SSH. Ключевым моментом было то, что 2 порта нужно было настроить и перенаправить. 20.04.2016
  • К сведению, port1 может быть равен port2, поэтому вы можете использовать только один порт. 10.06.2016
  • ssh -L <local_port_1>:<ip_target_jvm_is_running>:<remote_port_1> -L <local_port_2>:<ip_target_jvm_is_running>:<remote_port_2> localhost это часть, соответствующая Connect via ssh to the server and forward your local port1 and port2 to localhost:port1|2 an the server. ? 19.09.2019

  • 3

    У меня была такая же проблема при подключении 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
      
    09.05.2017

    4

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

    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-адрес моей удаленной машины.

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

    15.03.2015
  • Установить прокси в пользовательском интерфейсе у меня не работает, указать его в командной строке работает. Спасибо. Кстати, я использую версию 1.8.0_25 (сборка 140407) 13.10.2015
  • Определение прокси-сервера SOCKS в графическом интерфейсе visualvm у меня не сработало. Однако эти аргументы CLI работали нормально. 15.03.2016

  • 5

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

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

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

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

    НО VisualVM все еще не нашел удаленных процессов. Затем я удалил прослушивание локального хоста «Нет прокси-хостов», так как это, вероятно, заблокировало его.

    24.10.2012
  • Мне также пришлось открыть локальные свойства и добавить порт конфигурации jstat 1099 (или любой другой порт, который вы выбрали для jstatd). 26.04.2019

  • 6

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

    24.11.2011


    8

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

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

    1. ssh с sockproxy (например, ssh -D 6666 [email protected])
    2. запустить jvisualvm с носком ( jvisualvm.exe -J-DsocksProxyHost=localhost -J-DsocksProxyPort=6666 )
    3. добавить хост JXM (например: 234.234.234.234:16000)

    Используйте jvisualvm, простой способ обнаружить утечку памяти и контролировать ЦП, ОЗУ приложения.

    10.01.2019
    Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..