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.
Любая помощь?
Ответы
Ответ 1
Вам либо нужно запустить jstatd на удаленной стороне, либо указать соединение JMX с использованием порта host:.
Jstatd:
jstatd -J-Djava.security.policy=permissions.txt [-p port]
После этого: добавьте удаленное соединение с целевой машиной, а в свойствах этого удаленного соединения настройте соединение jstatd.
(файл permissions.txt содержит, например, следующее:
grant {
permission java.security.AllPermission;
};
Изменить: (ответьте на комментарий)
-
ssh -D 9696 [email protected]
и запустите jstatd, как указано выше, в удаленной командной строке. Если вы хотите, чтобы jstatd находился на другом порту, чем 1099 по умолчанию, используйте аргумент -p для jstatd.
- запустите
visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
на локальной машине
-
в visual vm: добавьте новое удаленное соединение и укажите удаленный хост и порт для jstatd (1099 по умолчанию или то, что вы указали с -p при запуске jstatd)
Теперь вы должны увидеть процессы на удаленной стороне в visualvm
Ответ 2
У меня есть другое решение, использующее стандартное туннелирование SSH и отсутствие портов брандмауэра для открытия.
Для меня прокси-сервер SOCKS не работает.
Начните свою JVM с помощью опций:
-Dcom.sun.management.jmxremote = истина
-Dcom.sun.management.jmxremote.ssl = ложь
-Dcom.sun.management.jmxremote.authenticate = ложь
-Dcom.sun.management.jmxremote.port = [port1]
-D java.rmi.server.hostname = локальный
-Dcom.sun.management.jmxremote.rmi.port = [port2]
Важной частью является "server.hostname = localhost". Кроме того, вы явно определяете оба порта (подключайте + "случайный" порт RMI), "jmxremote.rmi.port" требует, по крайней мере, обновления для Java 7 4 (я где-то читал, не проверял эту информацию - используйте "lsof -i" на вашем сервер для проверки действительно используемых портов).
(Конечно, вы можете использовать аутентификацию или SSL.)
Подключить через ssh к серверу и перенаправить локальный порт1 и порт2 на localhost: port1 | 2 и сервер.
В VisualVM откройте соединение JMX с localhost: port1 (без каких-либо настроек прокси).
Ответ 3
У меня возникла проблема привязки 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-адрес моей удаленной машины.
Воруя этот ответ я сделал полное напоминание на моем сайте.. i
надеюсь, что вы не против ankon
Спасибо за это, кстати:)
Ответ 4
У меня возникла та же проблема при подключении 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
Ответ 5
Я обнаружил, что аргументы jvm для прокси не работают. По крайней мере, в версии 1.3.3 (сборка 111013). Установка прокси-сервера в "Инструменты" > "Параметры" > "Сеть" работала для меня. Кроме того, системные настройки прокси-сервера должны работать, хотя по определению они влияют на все другие сетевые подключения.
Ответ 6
Я также обнаружил, что аргументы jvm:
-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
не работал над сборкой, я использую 1.3.2.
Поэтому я использовал "Инструменты" > "Параметры" > "Сеть" и установил его вручную в соответствии с настройками SOCKS.
НО VisualVM все еще не нашел удаленные процессы. Затем я удалил "Нет прокси-хостов" при прослушивании localhost, так как это, вероятно, заблокировало его.
Ответ 7
Попробуйте использовать другую версию jvisualvm (например, самую новую из https://visualvm.github.io/download.html)
Я не мог заставить его работать с jvisualvm, так как он не использовал прокси-сервер SOCKS (я не видел ничего связанного с jvisualvm в ssh -v -D 9696). Удаленные приложения никогда не появлялись в jvisualvm. Однако VisualVM показал их через несколько секунд.
Ответ 8
Я знаю, что этот вопрос старый, но я предлагаю более простое решение вместо использования jstat.
просто используйте только SSH и Jvisualvm
- ssh с sockproxy (ex ssh -D 6666 [email protected])
- Запустите jvisualvm с помощью sock (jvisualvm.exe -J -D socksProxyHost = localhost -J -D socksProxyPort = 6666)
- добавить хост JXM (например: 234.234.234.234:16000)
Используйте jvisualvm простой способ обнаружить утечку памяти и контролировать процессор, оперативную память приложения