Мониторинг GlarusBI¶
Диагностика проблем, связанных с производительностью, может быть достаточно сложной задачей. К счастью, JVM поставляется с инструментами, которые могут помочь в диагностике многих распространенных проблем. Включение JMX и использование такого инструмента, как VisualVM, может помочь диагностировать проблемы, связанные с нехваткой памяти, зависанием GlarusBI и замедленным откликом.
В этом руководстве предполагается, что у вас локально установлен инструмент VisualVM. Обычно VisualVM входит в состав OpenJDK и Oracle JDK и
находится в каталоге bin
установки JDK. В некоторых дистрибутивах линукс VisualVM отделен от JDK, в этом случае он будет установлен как отдельный пакет visualvm
.
Подключение к локально запущенному GlarusBI¶
Если у вас установлена VisualVM на сервере GlarusBI и вы можете запустить там VisualVM, это будет самым простым вариантом, т.к. вам не нужно настраивать удаленный коннект к вашему GlarusBI. В этом случае, запустите GlarusBI как обычно и отдельно запустите VisualVM. GlarusBI будет указана в разделе:
Подключение к удаленно запущенному 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 необходимо указать, как подключиться к работающему инстансу. Сначала добавьте удаленный хост:
Затем используйте имя, указанное выше:
Примечание: Ваш локальный компьютер должен иметь возможность ссылаться на указанное вами имя хоста, для чего может потребоваться запись hosts
Порт, указанный для хоста JMX, должен соответствовать указанному в переменных окружения, а так же порту, открытому в докер (в случае его использования):
Затем откройте новый удаленный процесс JMX:
Информация о выполнении¶
Подключение к работающему экземпляру GlarusBI с помощью VisualVM покажет много доступной информации о контексте выполнения. Здесь мы не сможем описать все возможности инструмента, но выделим несколько важных моментов. При возникновении проблем, связанных с памятью, обычно сразу же необходимо определить какой процесс потребляет дополнительную память. Для этого необходимо сделать снимок всех процессов в памяти в этот конкретный момент времени. Этот моментальный снимок памяти можно проанализировать позже с помощью таких инструментов, как Инструмент анализатора памяти Eclipse.
Создать Heap Dump со вкладки “Монитор” можно следующим образом:
Другим полезным инструментом для анализа работающей системы GlarusBI является Thread Dump. В случаях, когда GlarusBI зависает или работает очень медленно, с его помощью можно проанализировать, что выполняет каждый поток в конкретный момент времени. Проверить это можно на вкладке “Потоки”: