Przejdź do głównej zawartości

Profilowanie Docker

Funkcja Pro

Profilowanie Docker wymaga licencji Pro.

Profiluj aplikacje Java działające w lokalnych kontenerach Docker z automatycznym wykrywaniem.


GalataJ automatycznie wykrywa aplikacje Java działające w kontenerach Docker na Twoim lokalnym komputerze.

  1. Uruchom kontener Docker z aplikacją Java
  2. Otwórz panel Profiler w swoim IDE
  3. Kliknij Odśwież — kontenery Docker pojawią się na liście JVM
  4. Wybierz kontener i rozpocznij profilowanie

Nie wymaga konfiguracji. GalataJ obsługuje połączenie automatycznie.

JDK zalecane do automatycznego dołączania

Jeśli Twój kontener używa obrazu JDK, GalataJ dołącza się automatycznie bez żadnej dodatkowej konfiguracji. Jeśli Twój kontener używa JRE lub JDK bez wsparcia dołączania, nadal możesz profilować używając podejścia -javaagent. Zobacz Alternatywa: Użycie -javaagent poniżej.


GalataJ znajduje procesy Java działające w:

  • Docker Desktop (Windows/macOS)
  • Docker Engine (Linux)
  • Projektach Docker Compose

Dopóki kontener działa na Twoim lokalnym komputerze, GalataJ może go profilować.


Na liście JVM kontenery Docker pokazują:

  • Nazwa kontenera — nazwa, którą nadałeś kontenerowi
  • Nazwa obrazu — używany obraz Docker
  • ID kontenera — krótki identyfikator

Jeśli automatyczne dołączanie nie działa — na przykład Twój kontener używa obrazu JRE lub JDK, który nie obsługuje dołączania w czasie wykonywania — możesz załadować agenta profilera przy starcie używając -javaagent. Ta metoda działa z każdym obrazem Java, w tym JRE.

Wybierz jedną z poniższych opcji:

Dodaj poniższe do definicji swojego serwisu — bez zmian w Dockerfile:

services:
my-app:
# ... Twoja istniejąca konfiguracja ...
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"

Następnie zrestartuj swoje serwisy:

Okno terminala
docker compose up

Skopiuj JAR agenta do katalogu swojego projektu:

Okno terminala
cp ~/.galataj/agent/agent.jar ./agent.jar

Następnie dodaj te linie do Dockerfile przed ENTRYPOINT:

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

Bez zmian w plikach — przekaż montowanie woluminu i zmienne środowiskowe bezpośrednio:

Okno terminala
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
  • Zamień com.mycompany.myapp na pakiet bazowy swojej aplikacji (np. pakiet zawierający klasę @SpringBootApplication).
  • Na Linuxie parametr extra_hosts (Compose) lub --add-host (docker run) jest wymagany, aby kontener mógł połączyć się z hostem. Powyższe przykłady już to zawierają.
  • Przy użyciu kreatora IDE wygenerowany fragment kodu ma już wypełniony prawidłowy pakiet.

Tylko Lokalnie

GalataJ może profilować tylko kontenery Docker działające na Twoim lokalnym komputerze. Zdalne hosty Docker (SSH, zdalne API Docker) nie są obecnie obsługiwane.


  1. Upewnij się, że kontener działa (nie jest zatrzymany)
  2. Kliknij Odśwież w panelu profilera
  3. Sprawdź, czy kontener zawiera proces Java
  4. Uruchom Health Check, aby upewnić się, że GalataJ działa
  1. Upewnij się, że masz aktywowaną licencję Pro
  2. Sprawdź, czy Docker działa na Twoim komputerze
  3. Spróbuj ponownie uruchomić IDE

Błąd dołączania: jdk.attach niedostępny

Jeśli widzisz błędy takie jak:

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

kontener używa obrazu JRE lub JDK bez wsparcia dołączania.

Rozwiązanie A — Przejdź na obraz JDK:

# Przed (nie działa dla automatycznego dołączania)
FROM eclipse-temurin:17-jre
# Po (działa z GalataJ)
FROM eclipse-temurin:17-jdk

Zalecane obrazy JDK: eclipse-temurin:17-jdk, amazoncorretto:17, azul/zulu-openjdk:17.

Przebuduj obraz i uruchom kontener ponownie, a następnie rozpocznij profilowanie.

Rozwiązanie B — Użyj -javaagent zamiast tego:

Jeśli nie możesz przejść na obraz JDK, użyj podejścia -javaagent, które działa z każdym obrazem Java, w tym JRE. Zobacz Alternatywa: Użycie -javaagent powyżej.


Uaktualnij do Pro

Uzyskaj profilowanie Docker i więcej

Uaktualnij →

Historia Sesji

Porównaj wydajność kontenera w czasie

Dowiedz się więcej →