Мониторинг GlarusBI

Диагностика проблем, связанных с производительностью, может быть достаточно сложной задачей. К счастью, JVM поставляется с инструментами, которые могут помочь в диагностике многих распространенных проблем. Включение JMX и использование такого инструмента, как VisualVM, может помочь диагностировать проблемы, связанные с нехваткой памяти, зависанием GlarusBI и замедленным откликом.

В этом руководстве предполагается, что у вас локально установлен инструмент VisualVM. Обычно VisualVM входит в состав OpenJDK и Oracle JDK и находится в каталоге bin установки JDK. В некоторых дистрибутивах линукс VisualVM отделен от JDK, в этом случае он будет установлен как отдельный пакет visualvm.

Подключение к локально запущенному GlarusBI

Если у вас установлена VisualVM на сервере GlarusBI и вы можете запустить там VisualVM, это будет самым простым вариантом, т.к. вам не нужно настраивать удаленный коннект к вашему GlarusBI. В этом случае, запустите GlarusBI как обычно и отдельно запустите VisualVM. GlarusBI будет указана в разделе:

localprocess

Подключение к удаленно запущенному GlarusBI

Мониторинг удаленного экземпляра GlarusBI (или локального экземпляра, запущенного в докер контейнере) чаще распространен, но при этом он требует более долгой настройки. Сначала нам нужно указать некоторые системные свойства, которые укажут JVM, что нам необходим удаленный мониторинг. Предполагая, что мы запускаем GlarusBI с помощью java -jar glarusBI.jar, нам нужно изменить вызов приведенной ниже команды, добавив следющие параметры:

java --add-to-start=jmx,jmx-remote \
     -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.port=1099 \
     -Dcom.sun.management.jmxremote.rmi.port=1099 \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Dcom.sun.management.jmxremote.local.only=false \
     -Djava.rmi.server.hostname=<GlarusBI Hostname> \
     -jar glarusBI.jar

Порт 1099 — это обычный порт RMI/JMX, но может быть выбран так же любой другой доступный порт.

Примечание: Приведенная выше команда разрешает мониторинг вашего приложения внешним источникам, поэтому она должна использоваться только в доверенной сети и в течение короткого периода времени. Защита этого соединения возможна, см. документацию Oracle для дополнительной информации. Пользователям, запускающим GlarusBI в контейнере docker, необходимо будет указать системные переменные, указанные выше, а также необходимо будет обеспечить открытие порта докер контейнера. Docker также позволяет указывать переменные среды через отдельный файл, который можно передать в вызов docker run. Можно создать файл с именем metabase-vars.env с JAVA_OPTS и запустить следующим образом:

JAVA_OPTS=-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=<GlarusBI Hostname>

Примечание: В этом файле каждая переменная окружения должна находиться на отдельной строке.

docker run --env-file=metabase-vars.env -d -p 3000:3000 -p 1099:1099 -h <GlarusBI Hostname> --name metabase metabase/metabase

Параметр -p 1099:1099 открывает порт JMX для мониторинга и --env-file=metabase-vars.env передает дополнительную информацию, связанную с JMX. После запуска VisualVM необходимо указать, как подключиться к работающему инстансу. Сначала добавьте удаленный хост:

addremotehost

Затем используйте имя, указанное выше:

sethostname

Примечание: Ваш локальный компьютер должен иметь возможность ссылаться на указанное вами имя хоста, для чего может потребоваться запись hosts

addjmxhost

Порт, указанный для хоста JMX, должен соответствовать указанному в переменных окружения, а так же порту, открытому в докер (в случае его использования):

jmxport

Затем откройте новый удаленный процесс JMX:

jmxinstance

Информация о выполнении

Подключение к работающему экземпляру GlarusBI с помощью VisualVM покажет много доступной информации о контексте выполнения. Здесь мы не сможем описать все возможности инструмента, но выделим несколько важных моментов. При возникновении проблем, связанных с памятью, обычно сразу же необходимо определить какой процесс потребляет дополнительную память. Для этого необходимо сделать снимок всех процессов в памяти в этот конкретный момент времени. Этот моментальный снимок памяти можно проанализировать позже с помощью таких инструментов, как Инструмент анализатора памяти Eclipse.

Создать Heap Dump со вкладки “Монитор” можно следующим образом:

heapdump

Другим полезным инструментом для анализа работающей системы GlarusBI является Thread Dump. В случаях, когда GlarusBI зависает или работает очень медленно, с его помощью можно проанализировать, что выполняет каждый поток в конкретный момент времени. Проверить это можно на вкладке “Потоки”:

threaddump

Дополнительная документация