Мониторинг 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.
Подключение к удалённо запущенному 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 необходимо указать, как подключиться к работающему экземпляру. Сначала добавьте удалённый хост:
Затем используйте имя, указанное выше:
Ваш локальный компьютер должен иметь возможность ссылаться на указанное вами имя хоста, для чего может потребоваться запись hosts:
Если вы используете Docker, порт, указанный для хоста JMX, должен соответствовать системному свойству и открытому порту:
Затем откройте новый удалённый процесс JMX:
Информация о выполнении¶
Подключение к работающему экземпляру Glarus BI с помощью VisualVM предоставляет много информации о выполнении. Вот некоторые ключевые возможности:
Heap Dump¶
При возникновении проблем, связанных с памятью, обычно первый вопрос, который задают: что потребляет дополнительную память? Heap Dump создаст снимок всего в памяти в конкретный момент времени. Этот снимок памяти можно проанализировать позже с помощью таких инструментов, как Инструмент анализатора памяти Eclipse.
Создать Heap Dump со вкладки "Монитор" можно следующим образом:
Thread Dump¶
Другим полезным инструментом для анализа работающей системы Glarus BI является Thread Dump. В случаях, когда Glarus BI зависает или работает очень медленно, Thread Dump покажет, что выполняет каждый поток (или на чём он заблокирован) в конкретный момент времени. Получить Thread Dump можно на вкладке "Потоки":