Профилирование Docker
Функция Pro
Профилирование Docker требует лицензии Pro.
Профилируйте Java-приложения, работающие в локальных контейнерах Docker с автоматическим обнаружением.
Как это работает
Заголовок раздела «Как это работает»GalataJ автоматически обнаруживает Java-приложения, работающие в контейнерах Docker на вашей локальной машине.
- Запустите контейнер Docker с Java-приложением
- Откройте панель Profiler в вашей IDE
- Нажмите Обновить — контейнеры Docker появятся в списке JVM
- Выберите контейнер и начните профилирование
Настройка не требуется. GalataJ автоматически управляет подключением.
JDK рекомендуется для автоматического подключения
Если ваш контейнер использует образ JDK, GalataJ подключается автоматически без дополнительной настройки. Если ваш контейнер использует JRE или JDK без поддержки подключения, вы можете профилировать с помощью подхода -javaagent. См. Альтернатива: Использование -javaagent ниже.
Что обнаруживается
Заголовок раздела «Что обнаруживается»GalataJ находит Java-процессы, работающие в:
- Docker Desktop (Windows/macOS)
- Docker Engine (Linux)
- Проектах Docker Compose
Пока контейнер работает на вашей локальной машине, GalataJ может его профилировать.
Идентификация контейнеров
Заголовок раздела «Идентификация контейнеров»В списке JVM контейнеры Docker показывают:
- Имя контейнера — имя, которое вы дали контейнеру
- Имя образа — используемый образ Docker
- ID контейнера — короткий идентификатор
Альтернатива: Использование -javaagent
Заголовок раздела «Альтернатива: Использование -javaagent»Если автоматическое подключение не работает — например, ваш контейнер использует образ JRE или JDK, не поддерживающий подключение во время выполнения — вы можете загрузить агент профилировщика при запуске с помощью -javaagent. Этот метод работает с любым Java-образом, включая JRE.
Выберите один из следующих вариантов:
Вариант 1: docker-compose.yml
Заголовок раздела «Вариант 1: docker-compose.yml»Добавьте следующее в определение вашего сервиса — изменения 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Вариант 2: Dockerfile
Заголовок раздела «Вариант 2: Dockerfile»Скопируйте JAR агента в директорию вашего проекта:
cp ~/.galataj/agent/agent.jar ./agent.jarЗатем добавьте эти строки в ваш Dockerfile перед ENTRYPOINT:
COPY agent.jar /opt/galataj-agent.jarENV JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar"ENV GALATAJ_PACKAGE=com.mycompany.myappВариант 3: docker run
Заголовок раздела «Вариант 3: docker run»Изменения файлов не требуются — передайте монтирование тома и переменные окружения напрямую:
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) в настоящее время не поддерживаются.
Устранение неполадок
Заголовок раздела «Устранение неполадок»Контейнер не появляется
Заголовок раздела «Контейнер не появляется»- Убедитесь, что контейнер работает (не остановлен)
- Нажмите Обновить в панели профилировщика
- Проверьте, что в контейнере есть Java-процесс
- Запустите Health Check, чтобы убедиться, что GalataJ работает
Профилирование не запускается
Заголовок раздела «Профилирование не запускается»- Убедитесь, что у вас активирована лицензия Pro
- Проверьте, что Docker работает на вашей машине
- Попробуйте перезапустить 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 выше.