Для контейнеризированных сервисов есть возможность прокинуть порт для отладки каких-либо проблем, либо снятия 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> |
Данную переменную необходимо указывать напрямую в 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, запущенного в контейнере:
version: '3'
services:
eltex-wifi-cab:
container_name: eltex-wifi-cab
image: ${ELTEX_HUB}/eltex-wifi-cab:${SWLC_VERSION}
restart: unless-stopped
ports:
- "8083:8083/tcp"
- "9993:9993/tcp"
hostname: wifi-cab-docker
env_file: .env
environment:
# Настройки таймзоны
- TZ=${TZ}
# Настройки логирования
- LOG_LEVEL=DEBUG
- CONSOLE_LEVEL=INFO
- LOGGER_DEFAULT_LEVEL=OFF
- LOGGER_SCHEDULER_LEVEL=OFF
- LOGGER_EXPORT_LEVEL=OFF
- LOGGER_I18N_LEVEL=OFF
- LOGGER_LICENCE_LEVEL=OFF
- LOGGER_QUARTZ_LEVEL=OFF
- LOGGER_MONGODB_DRIVER_LEVEL=INFO
- LOGGER_NBI_LEVEL=OFF
- LOGGER_SPRING_LEVEL=OFF
# Настройки Graylog
- GELF_LEVEL=${GELF_LEVEL}
- GELF_HOST=${GELF_HOST}
- GELF_PORT=${GELF_PORT}
- 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
volumes:
- "/etc/eltex-wifi-cab/system.xml:/etc/eltex-wifi-cab/system.xml:ro"
- "/etc/eltex-wifi-cab/local_secret:/etc/eltex-wifi-cab/local_secret:ro"
# Файл лицензии. Закомментируйте строку ниже, если у Вас его нет
- "./licence.xml:/etc/eltex-wifi-cab/licence.xml:ro"
# Eltex OUI list
- /usr/share/oui-base/oui-small.txt:/usr/share/oui-base/oui-small.txt:ro
# HeapDumpPath
# execute before: sudo chown -R 100001:100001 ./eltex-wifi-cab/java-heap-dump
- ./eltex-wifi-cab/java-heap-dump:/var/log/java-heap-dump
# Logs
# - ./log4j2-docker.xml:/etc/eltex-wifi-cab/log4j2-docker.xml
# execute before: sudo mkdir -p /var/log/eltex-wifi-cab && chown -R 100001:100001 /var/log/eltex-wifi-cab
# - /var/log/eltex-wifi-cab:/var/log/eltex-wifi-cab
|
Процесс установки и первоначальной настройки можно найти на официальном сайте - https://visualvm.github.io/
Для добавления нужного хоста, на котором запущен сервис в контейнере, запустите VisualVM и выберите вкладку Remote. Нажмите ПКМ → Add Remote Host. Укажите IP-адрес удаленного хоста.


Далее, нажмите на добавленный хост ПКМ → Add JMX Connection, укажите порт для отладки, который установлен на сервисе и нажмите OK.

Для перехода к выбранному сервису необходимо дважды нажать ЛКМ по добавленному JMX Connection