Перейти к содержанию

Мониторинг Glarus BI

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

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

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

Если у вас установлена VisualVM на сервере Glarus BI, и вы можете запустить там VisualVM, это будет самым простым вариантом, т.к. вам не нужно настраивать удалённое подключение к вашему экземпляру Glarus BI. В этом случае запустите Glarus BI как обычно и отдельно запустите VisualVM.

localprocess

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

Мониторинг удалённого экземпляра Glarus BI (или локального экземпляра, запущенного в Docker-контейнере) чаще распространён, но при этом он требует более долгой настройки. Сначала нужно указать некоторые системные свойства, которые укажут JVM, что необходим удалённый мониторинг. Предполагая, что мы запускаем Glarus BI с помощью java --add-opens java.base/java.nio=ALL-UNNAMED -jar glarus-bi.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=<Glarus BI Hostname> \
     -jar glarus-bi.jar

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

Приведённая выше команда разрешает мониторинг вашего приложения внешним источникам, поэтому она должна использоваться только в доверенной сети и в течение короткого периода времени. Защита этого соединения возможна, см. документацию Oracle (англ.) для дополнительной информации.

Пользователям, запускающим Glarus BI в 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=<Glarus BI Hostname>

В этом файле каждая переменная окружения должна находиться на отдельной строке без разрывов строк:

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

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

addremotehost

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

sethostname

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

addjmxhost

Если вы используете Docker, порт, указанный для хоста JMX, должен соответствовать системному свойству и открытому порту:

jmxport

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

jmxinstance

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

Подключение к работающему экземпляру Glarus BI с помощью VisualVM предоставляет много информации о выполнении. Вот некоторые ключевые возможности:

Heap Dump

При возникновении проблем, связанных с памятью, обычно первый вопрос, который задают: что потребляет дополнительную память? Heap Dump создаст снимок всего в памяти в конкретный момент времени. Этот снимок памяти можно проанализировать позже с помощью таких инструментов, как Инструмент анализатора памяти Eclipse.

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

heapdump

Thread Dump

Другим полезным инструментом для анализа работающей системы Glarus BI является Thread Dump. В случаях, когда Glarus BI зависает или работает очень медленно, Thread Dump покажет, что выполняет каждый поток (или на чём он заблокирован) в конкретный момент времени. Получить Thread Dump можно на вкладке "Потоки":

threaddump

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