1. Связь: JStatD против JMX
Существует два режима связи между VisualVM и JVM: либо через протокол Java Management Extensions (JMX), либо через jstatd .
jstatd
jstatd — это демон, который распространяется вместе с JDK. Вы запускаете его из командной строки (вероятно, необходимо запустить его как пользователь, выполняющий целевую JVM или как root) на целевой машине, и VisualVM свяжется с ним для получения информации об удаленных JVM.
- Преимущества: Может подключаться к работающей JVM, нет необходимости запускать его со специальными параметрами
- Недостатки: гораздо более ограниченные возможности мониторинга (например, нет мониторинга использования процессора, невозможно запустить Sampler и / или получить дампы потока).
Напр .:
1
2
3
4
5
6
|
bash > cat jstatd.all.policy grant codebase 'file:${java.home}/../lib/tools.jar' { permission java.security.AllPermission; } bash > sudo /path/to/JDK/bin/jstatd -J-Djava.security.policy=jstatd.all.policy # You can specify port with -p number and get more info with -J-Djava.rmi.server.logCalls=true |
Примечание: замените «$ {java.home} /../ lib / tools.jar» на «/path/to/jdk/lib/tools.jar», если вы только скопировали, но не установили JDK.
Если вы получили сбой
1
2
3
4
|
Could not create remote object access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write) java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) |
тогда jstatd, вероятно, не был запущен с правильным файлом java.security.policy (попробуйте указать полный путь к нему).
Больше информации о VisualVM и jstatd от Oracle.
JMX
- Преимущества: Использование JMX даст вам полную мощь VisualVM.
- Недостатки: необходимо запустить JVM с некоторыми системными свойствами.
Обычно при запуске целевой JVM вы захотите использовать что-то вроде следующих свойств (хотя вы также можете включить SSL и / или требовать имя пользователя и пароль):
1
|
yourJavaCommand... -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl= false -Dcom.sun.management.jmxremote.authenticate= false -Dcom.sun.management.jmxremote.port=1098 |
Посмотрите Удаленные Соединения JMX .
2. Безопасность: SSH
Самый простой способ подключиться к удаленному JMX или jstatd через ssh — это использовать прокси-сервер SOCKS , который могут настроить стандартные клиенты ssh.
2.1 Настройка SSH-туннеля с помощью SOCKS
1
|
ssh - v -D 9696 my_server.example.com |
2.2 Настройка VisualVM для использования прокси
Сервис-> Параметры-> Сеть — Настройки прокси вручную — проверьте и настройте SOCKS Proxy на локальном хосте и порту 9696
2.3 Подключите VisualVM к цели
Файл -> Добавить удаленный хост… — введите IP или имя хоста удаленного соединения JStatD.
Журналы должны отображаться как в окне ssh (благодаря его «-v», f.ex. « debug1: соединение с портом 9696, переадресация на запрошенный носок, порт 0 ») и « debug1: канал 3: free: direct-tcpip: прослушивающий порт 9696 для порта 1099.47.71, порт 1099, соединение с 127.0.0.1 через порт 61262, nchannels 6 «) и в консоли, с которой вы запустили jstatd (многие, например,» FINER: RMI TCP Connection (23) -10.2.47.71 :… «)
Подождите несколько минут после добавления удаленного хоста, затем вы увидите JVM, работающие там.
Доступная статистика: аргументы JVM, Monitor: Heap, классы, мониторинг потоков (но не CPU). Sampler и MBeans требуют JMX.
JMX
Щелкните правой кнопкой мыши на удаленном хосте, который вы добавили, и выберите Add JMX Connection…, введите порт JMX, который вы выбрали.
Вы должны увидеть журналы, похожие на jstatd.
Доступная статистика: также загрузка ЦП, системные свойства, подробный отчет о потоках с доступом к трассировке стека, выборка ЦП (выборка памяти не поддерживается).
Примечание: Sampler vs. Profiler
Сэмплер VisualVM исключает время, затрачиваемое на Object.wait и Thread.sleep (например, ожидание ввода-вывода). Используйте средство профилирования NetBeans для профилирования или выборки удаленного приложения, если вы хотите иметь больше контроля или хотите включить время Object.wait и Thread.sleep. Для этого требуется, чтобы его удаленный пакет (агент Java, то есть файл JAR) был в целевой JVM (мастер присоединения NetBeans может сгенерировать удаленный пакет для вас на шаге 4, «Ручная интеграция», и показать варианты для передачи целевому объекту. JVM, чтобы использовать это).
Вы можете запустить профилировщик через SSH, перенаправив его порт по умолчанию (5140) и подключившись к перенаправленному порту на localhost. (NetBeans версия 7.1.1.)
Не забудьте поделиться!
Ссылка: VisualVM: Мониторинг удаленной JVM через SSH (JMX или нет) от нашего партнера по JCG Якуба Холи в блоге Holy Java .