Вопрос
Я читал Удаленная виртуальная машина 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;
};
Редактировать: (Ответ на комментарий)
ssh -D 9696 me@remote
, и запустите jstatd, как описано выше, в удаленной командной строке.Если вы хотите, чтобы jstatd был подключен к порту, отличному от порта 1099 по умолчанию, используйте аргумент -p для jstatd.- бежать
visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
на локальном компьютере в визуальной виртуальной машине:добавьте новое удаленное подключение и укажите 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
<Ол>Используйте jvisualvm простой способ обнаружить утечку памяти и контролировать ЦП, ОЗУ приложения