Статьи

VisualVM: мониторинг удаленной JVM через SSH (JMX или нет)

VisualVM — это отличный инструмент для мониторинга JVM (5.0+) с точки зрения использования памяти, потоков, GC, MBeans и т. Д. Давайте посмотрим, как использовать его через SSH для мониторинга (или даже профилирования с использованием его сэмплера) удаленной JVM с использованием JMX или без него. Это. Этот пост основан на Sun JVM 1.6, работающей на Ubuntu 10 и VisualVM 1.3.3.

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 .