Для контейнеризированных сервисов есть возможность прокинуть порт для отладки каких-либо проблем, либо снятия heap dump с использованием утилиты visualvm.
Настройка универсальна, и выполняется одинаково для всех контейнеризированных сервисов.
Настройка переменной среды
Для настройки данного функционала необходимо указать в переменных окружения (environment) адрес и порт отладки сервиса в следующем виде:
JDK_JAVA_OPTIONS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=<service_port> -Dcom.sun.management.jmxremote.rmi.port=<service_port> -Djava.rmi.server.hostname=<docker_host_ip>
- service_port - порт отладки сервиса (задается произвольно пользователем, должен отличаться от всех используемых в системе открытых портов)
- docker_host_ip - адрес хоста с запущенным docker-контейнером
Данную переменную необходимо указывать напрямую в docker-compose.yml файле:
services: xxx: ports: - "9999:9999/tcp" environment: - JDK_JAVA_OPTIONS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Djava.rmi.server.hostname=192.168.1.1
Проброс порта
Также, для работы данный переменной, необходимо открыть порт на хосте, где запущен сервис и пробросить его в контейнер. Настраивается это путем указания выделенного вами порта для отладки в разделе ports. После всех указанных настроек необходимо перезапустить контейнер с помощью команды:
docker-compose down && docker-compose up
Пример
Ниже приведен пример использования данной переменной для сервиса eltex-wifi-cab, запущенного в контейнере:
Запуск отладки в VisualVM
Процесс установки и первоначальной настройки можно найти на официальном сайте - https://visualvm.github.io/
Для добавления нужного хоста, на котором запущен сервис в контейнере, запустите VisualVM и выберите вкладку Remote. Нажмите ПКМ → Add Remote Host. Укажите IP-адрес удаленного хоста.
Далее, нажмите на добавленный хост ПКМ → Add JMX Connection, укажите порт для отладки, который установлен на сервисе и нажмите OK.
Для перехода к выбранному сервису необходимо дважды нажать ЛКМ по добавленному JMX Connection