Profilowanie Docker
Funkcja Pro
Profilowanie Docker wymaga licencji Pro.
Profiluj aplikacje Java działające w lokalnych kontenerach Docker z automatycznym wykrywaniem.
Jak to Działa
Dział zatytułowany „Jak to Działa”GalataJ automatycznie wykrywa aplikacje Java działające w kontenerach Docker na Twoim lokalnym komputerze.
- Uruchom kontener Docker z aplikacją Java
- Otwórz panel Profiler w swoim IDE
- Kliknij Odśwież — kontenery Docker pojawią się na liście JVM
- 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.
Co Jest Wykrywane
Dział zatytułowany „Co Jest Wykrywane”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ć.
Identyfikacja Kontenerów
Dział zatytułowany „Identyfikacja Kontenerów”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
Alternatywa: Użycie -javaagent
Dział zatytułowany „Alternatywa: Użycie -javaagent”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:
Opcja 1: docker-compose.yml
Dział zatytułowany „Opcja 1: docker-compose.yml”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:
docker compose upOpcja 2: Dockerfile
Dział zatytułowany „Opcja 2: Dockerfile”Skopiuj JAR agenta do katalogu swojego projektu:
cp ~/.galataj/agent/agent.jar ./agent.jarNastępnie dodaj te linie do Dockerfile przed ENTRYPOINT:
COPY agent.jar /opt/galataj-agent.jarENV JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar"ENV GALATAJ_PACKAGE=com.mycompany.myappOpcja 3: docker run
Dział zatytułowany „Opcja 3: docker run”Bez zmian w plikach — przekaż montowanie woluminu i zmienne środowiskowe bezpośrednio:
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-imageWażne Uwagi
Dział zatytułowany „Ważne Uwagi”- Zamień
com.mycompany.myappna 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.
Ograniczenia
Dział zatytułowany „Ograniczenia”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.
Rozwiązywanie Problemów
Dział zatytułowany „Rozwiązywanie Problemów”Kontener się nie pojawia
Dział zatytułowany „Kontener się nie pojawia”- Upewnij się, że kontener działa (nie jest zatrzymany)
- Kliknij Odśwież w panelu profilera
- Sprawdź, czy kontener zawiera proces Java
- Uruchom Health Check, aby upewnić się, że GalataJ działa
Profilowanie się nie uruchamia
Dział zatytułowany „Profilowanie się nie uruchamia”- Upewnij się, że masz aktywowaną licencję Pro
- Sprawdź, czy Docker działa na Twoim komputerze
- 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-jdkZalecane 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.