# Мониторинг GlarusBI Диагностика проблем, связанных с производительностью, может быть достаточно сложной задачей. К счастью, JVM поставляется с инструментами, которые могут помочь в диагностике многих распространенных проблем. Включение JMX и использование такого инструмента, как VisualVM, может помочь диагностировать проблемы, связанные с нехваткой памяти, зависанием GlarusBI и замедленным откликом. В этом руководстве предполагается, что у вас локально установлен инструмент VisualVM. Обычно VisualVM входит в состав OpenJDK и Oracle JDK и находится в каталоге `bin` установки JDK. В некоторых дистрибутивах линукс VisualVM отделен от JDK, в этом случае он будет установлен как отдельный пакет `visualvm`. ## Подключение к локально запущенному GlarusBI Если у вас установлена VisualVM на сервере GlarusBI и вы можете запустить там VisualVM, это будет самым простым вариантом, т.к. вам не нужно настраивать удаленный коннект к вашему GlarusBI. В этом случае, запустите GlarusBI как обычно и отдельно запустите VisualVM. GlarusBI будет указана в разделе: ![localprocess](images/LocalProcessVisualVM.png) ## Подключение к удаленно запущенному 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= \ -jar glarusBI.jar ``` Порт 1099 — это обычный порт RMI/JMX, но может быть выбран так же любой другой доступный порт. _Примечание:_ Приведенная выше команда разрешает мониторинг вашего приложения внешним источникам, поэтому она должна использоваться только в доверенной сети и в течение короткого периода времени. Защита этого соединения возможна, см. [документацию Oracle](https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html) для дополнительной информации. Пользователям, запускающим 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= ``` _Примечание:_ В этом файле каждая переменная окружения должна находиться на отдельной строке. ``` docker run --env-file=metabase-vars.env -d -p 3000:3000 -p 1099:1099 -h --name metabase metabase/metabase ``` Параметр `-p 1099:1099` открывает порт JMX для мониторинга и `--env-file=metabase-vars.env` передает дополнительную информацию, связанную с JMX. После запуска VisualVM необходимо указать, как подключиться к работающему инстансу. Сначала добавьте удаленный хост: ![addremotehost](images/AddRemoteHost.png) Затем используйте имя, указанное выше: ![sethostname](images/SetRemoteHostName.png) _Примечание:_ Ваш локальный компьютер должен иметь возможность ссылаться на указанное вами имя хоста, для чего может потребоваться запись hosts ![addjmxhost](images/ClickAddJMXHost.png) Порт, указанный для хоста JMX, должен соответствовать указанному в переменных окружения, а так же порту, открытому в докер (в случае его использования): ![jmxport](images/EnterJMXPort.png) Затем откройте новый удаленный процесс JMX: ![jmxinstance](images/OpenRemoteInstance.png) ## Информация о выполнении Подключение к работающему экземпляру GlarusBI с помощью VisualVM покажет много доступной информации о контексте выполнения. Здесь мы не сможем описать все возможности инструмента, но выделим несколько важных моментов. При возникновении проблем, связанных с памятью, обычно сразу же необходимо определить какой процесс потребляет дополнительную память. Для этого необходимо сделать снимок всех процессов в памяти в этот конкретный момент времени. Этот моментальный снимок памяти можно проанализировать позже с помощью таких инструментов, как [Инструмент анализатора памяти Eclipse](https://www.eclipse.org/mat/). Создать Heap Dump со вкладки "Монитор" можно следующим образом: ![heapdump](images/HeapDump.png) Другим полезным инструментом для анализа работающей системы GlarusBI является Thread Dump. В случаях, когда GlarusBI зависает или работает очень медленно, с его помощью можно проанализировать, что выполняет каждый поток в конкретный момент времени. Проверить это можно на вкладке "Потоки": ![threaddump](images/ThreadDump.png) ## Дополнительная документация - [Мониторинг с Prometheus](./observability-with-prometheus.md)