Перейти к содержимому

Профилирование Docker

Функция Pro

Профилирование Docker требует лицензии Pro.

Профилируйте Java-приложения, работающие в локальных контейнерах Docker с автоматическим обнаружением.


GalataJ автоматически обнаруживает Java-приложения, работающие в контейнерах Docker на вашей локальной машине.

  1. Запустите контейнер Docker с Java-приложением
  2. Откройте панель Profiler в вашей IDE
  3. Нажмите Обновить — контейнеры Docker появятся в списке JVM
  4. Выберите контейнер и начните профилирование

Настройка не требуется. GalataJ автоматически управляет подключением.

JDK рекомендуется для автоматического подключения

Если ваш контейнер использует образ JDK, GalataJ подключается автоматически без дополнительной настройки. Если ваш контейнер использует JRE или JDK без поддержки подключения, вы можете профилировать с помощью подхода -javaagent. См. Альтернатива: Использование -javaagent ниже.


GalataJ находит Java-процессы, работающие в:

  • Docker Desktop (Windows/macOS)
  • Docker Engine (Linux)
  • Проектах Docker Compose

Пока контейнер работает на вашей локальной машине, GalataJ может его профилировать.


В списке JVM контейнеры Docker показывают:

  • Имя контейнера — имя, которое вы дали контейнеру
  • Имя образа — используемый образ Docker
  • ID контейнера — короткий идентификатор

Если автоматическое подключение не работает — например, ваш контейнер использует образ JRE или JDK, не поддерживающий подключение во время выполнения — вы можете загрузить агент профилировщика при запуске с помощью -javaagent. Этот метод работает с любым Java-образом, включая JRE.

Выберите один из следующих вариантов:

Добавьте следующее в определение вашего сервиса — изменения Dockerfile не требуются:

services:
my-app:
# ... ваша существующая конфигурация ...
volumes:
- ~/.galataj/agent/agent.jar:/opt/galataj-agent.jar:ro
environment:
- JAVA_TOOL_OPTIONS=-javaagent:/opt/galataj-agent.jar
- GALATAJ_PACKAGE=com.mycompany.myapp
extra_hosts:
- "host.docker.internal:host-gateway"

Затем перезапустите ваши сервисы:

Окно терминала
docker compose up

Скопируйте JAR агента в директорию вашего проекта:

Окно терминала
cp ~/.galataj/agent/agent.jar ./agent.jar

Затем добавьте эти строки в ваш Dockerfile перед ENTRYPOINT:

COPY agent.jar /opt/galataj-agent.jar
ENV JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar"
ENV GALATAJ_PACKAGE=com.mycompany.myapp

Изменения файлов не требуются — передайте монтирование тома и переменные окружения напрямую:

Окно терминала
docker run \
-v ~/.galataj/agent/agent.jar:/opt/galataj-agent.jar:ro \
-e JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar" \
-e GALATAJ_PACKAGE=com.mycompany.myapp \
--add-host=host.docker.internal:host-gateway \
your-image
  • Замените com.mycompany.myapp на базовый пакет вашего приложения (например, пакет, содержащий ваш класс @SpringBootApplication).
  • На Linux параметр extra_hosts (Compose) или --add-host (docker run) обязателен, чтобы контейнер мог обращаться к хосту. Примеры выше уже включают это.
  • При использовании мастера IDE сгенерированный фрагмент уже содержит правильный пакет.

Только локально

GalataJ может профилировать только контейнеры Docker, работающие на вашей локальной машине. Удалённые хосты Docker (SSH, удалённый Docker API) в настоящее время не поддерживаются.


  1. Убедитесь, что контейнер работает (не остановлен)
  2. Нажмите Обновить в панели профилировщика
  3. Проверьте, что в контейнере есть Java-процесс
  4. Запустите Health Check, чтобы убедиться, что GalataJ работает
  1. Убедитесь, что у вас активирована лицензия Pro
  2. Проверьте, что Docker работает на вашей машине
  3. Попробуйте перезапустить IDE

Ошибка подключения: jdk.attach недоступен

Если вы видите ошибки вроде:

  • “jdk.attach module not available in container”
  • “The container image must include JDK (not just JRE)”
  • “NoClassDefFoundError: com/sun/tools/attach/AttachNotSupportedException”

контейнер использует образ JRE или JDK без поддержки подключения.

Решение A — Перейти на образ JDK:

# До (не работает для автоматического подключения)
FROM eclipse-temurin:17-jre
# После (работает с GalataJ)
FROM eclipse-temurin:17-jdk

Рекомендуемые образы JDK: eclipse-temurin:17-jdk, amazoncorretto:17, azul/zulu-openjdk:17.

Пересоберите образ и запустите контейнер снова, затем начните профилирование.

Решение B — Использовать -javaagent вместо этого:

Если вы не можете перейти на образ JDK, используйте подход -javaagent, который работает с любым Java-образом, включая JRE. См. Альтернатива: Использование -javaagent выше.


Перейти на Pro

Получите профилирование Docker и многое другое

Перейти →

История сессий

Сравнивайте производительность контейнера с течением времени

Подробнее →