Docker-Profilierung
Pro-Funktion
Docker-Profilierung erfordert eine Pro-Lizenz.
Profilieren Sie Java-Anwendungen, die in lokalen Docker-Containern laufen, mit automatischer Erkennung.
Wie es funktioniert
Abschnitt betitelt „Wie es funktioniert“GalataJ erkennt automatisch Java-Anwendungen, die in Docker-Containern auf Ihrem lokalen Rechner laufen.
- Starten Sie Ihren Docker-Container mit einer Java-Anwendung
- Öffnen Sie das Profiler-Panel in Ihrer IDE
- Klicken Sie auf Aktualisieren — Docker-Container erscheinen in der JVM-Liste
- Wählen Sie den Container aus und starten Sie die Profilierung
Keine Konfiguration erforderlich. GalataJ übernimmt die Verbindung automatisch.
JDK empfohlen für automatischen Attach
Wenn Ihr Container ein JDK-Image verwendet, verbindet sich GalataJ automatisch ohne Konfiguration. Wenn Ihr Container ein JRE oder ein JDK ohne Attach-Unterstützung verwendet, können Sie trotzdem mit dem -javaagent-Ansatz profilieren. Siehe Alternative: Verwendung von -javaagent unten.
Was erkannt wird
Abschnitt betitelt „Was erkannt wird“GalataJ findet Java-Prozesse, die laufen in:
- Docker Desktop (Windows/macOS)
- Docker Engine (Linux)
- Docker Compose-Projekten
Solange der Container auf Ihrem lokalen Rechner läuft, kann GalataJ ihn profilieren.
Container identifizieren
Abschnitt betitelt „Container identifizieren“In der JVM-Liste zeigen Docker-Container:
- Container-Name — Der Name, den Sie dem Container gegeben haben
- Image-Name — Das verwendete Docker-Image
- Container-ID — Kurze ID zur Identifikation
Alternative: Verwendung von -javaagent
Wenn der automatische Attach nicht funktioniert — z.B. weil Ihr Container ein JRE-Image oder ein JDK ohne Runtime-Attach-Unterstützung verwendet — können Sie den Profiler-Agent beim Start mit -javaagent laden. Dies funktioniert mit jedem Java-Image, einschließlich JRE.
Wählen Sie eine der folgenden Optionen:
Option 1: docker-compose.yml
Abschnitt betitelt „Option 1: docker-compose.yml“Fügen Sie Folgendes zu Ihrer Service-Definition hinzu — keine Dockerfile-Änderungen nötig:
services: my-app: # ... your existing config ... 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"Dann starten Sie Ihre Services neu:
docker compose upOption 2: Dockerfile
Abschnitt betitelt „Option 2: Dockerfile“Kopieren Sie die Agent-JAR in Ihr Projektverzeichnis:
cp ~/.galataj/agent/agent.jar ./agent.jarFügen Sie diese Zeilen vor dem ENTRYPOINT in Ihr Dockerfile ein:
COPY agent.jar /opt/galataj-agent.jarENV JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar"ENV GALATAJ_PACKAGE=com.mycompany.myappOption 3: docker run
Abschnitt betitelt „Option 3: docker run“Keine Dateiänderungen nötig — übergeben Sie Volume-Mount und Umgebungsvariablen direkt:
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-imageWichtige Hinweise
Abschnitt betitelt „Wichtige Hinweise“- Ersetzen Sie
com.mycompany.myappdurch das Basis-Paket Ihrer Anwendung (z.B. das Paket mit Ihrer@SpringBootApplication-Klasse). - Unter Linux ist das
extra_hosts-Flag (Compose) bzw.--add-host(docker run) erforderlich, damit der Container den Host erreichen kann. Die Beispiele oben enthalten dies bereits. - Bei Verwendung des IDE-Assistenten enthält der generierte Ausschnitt bereits das richtige Paket.
Einschränkungen
Abschnitt betitelt „Einschränkungen“Nur lokal
GalataJ kann nur Docker-Container profilieren, die auf Ihrem lokalen Rechner laufen. Remote-Docker-Hosts (SSH, Remote-Docker-API) werden derzeit nicht unterstützt.
Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“Container erscheint nicht
Abschnitt betitelt „Container erscheint nicht“- Stellen Sie sicher, dass der Container läuft (nicht gestoppt)
- Klicken Sie auf Aktualisieren im Profiler-Panel
- Überprüfen Sie, ob der Container einen Java-Prozess enthält
- Führen Sie den Health Check aus, um sicherzustellen, dass GalataJ funktioniert
Profilierung startet nicht
Abschnitt betitelt „Profilierung startet nicht“- Stellen Sie sicher, dass Sie eine Pro-Lizenz aktiviert haben
- Prüfen Sie, ob Docker auf Ihrem Rechner läuft
- Versuchen Sie, Ihre IDE neu zu starten
Attach fehlgeschlagen: jdk.attach nicht verfügbar
Wenn Sie Fehler wie diese sehen:
- “jdk.attach module not available in container”
- “The container image must include JDK (not just JRE)”
- “NoClassDefFoundError: com/sun/tools/attach/AttachNotSupportedException”
verwendet der Container ein JRE-Image oder ein JDK ohne Attach-Unterstützung.
Lösung A — Wechseln Sie zu einem JDK-Image:
# Vorher (schlägt bei automatischem Attach fehl)FROM eclipse-temurin:17-jre
# Nachher (funktioniert mit GalataJ)FROM eclipse-temurin:17-jdkEmpfohlene JDK-Images: eclipse-temurin:17-jdk, amazoncorretto:17, azul/zulu-openjdk:17.
Bauen Sie das Image neu, starten Sie den Container erneut und beginnen Sie dann mit der Profilierung.
Lösung B — Verwenden Sie stattdessen -javaagent:
Wenn Sie nicht zu einem JDK-Image wechseln können, verwenden Sie den -javaagent-Ansatz, der mit jedem Java-Image einschließlich JRE funktioniert. Siehe Alternative: Verwendung von -javaagent oben.