Zum Inhalt springen

Docker-Profilierung

Pro-Funktion

Docker-Profilierung erfordert eine Pro-Lizenz.

Profilieren Sie Java-Anwendungen, die in lokalen Docker-Containern laufen, mit automatischer Erkennung.


GalataJ erkennt automatisch Java-Anwendungen, die in Docker-Containern auf Ihrem lokalen Rechner laufen.

  1. Starten Sie Ihren Docker-Container mit einer Java-Anwendung
  2. Öffnen Sie das Profiler-Panel in Ihrer IDE
  3. Klicken Sie auf Aktualisieren — Docker-Container erscheinen in der JVM-Liste
  4. 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.


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.


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:

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:

Terminal-Fenster
docker compose up

Kopieren Sie die Agent-JAR in Ihr Projektverzeichnis:

Terminal-Fenster
cp ~/.galataj/agent/agent.jar ./agent.jar

Fügen Sie diese Zeilen vor dem ENTRYPOINT in Ihr Dockerfile ein:

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

Keine Dateiänderungen nötig — übergeben Sie Volume-Mount und Umgebungsvariablen direkt:

Terminal-Fenster
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
  • Ersetzen Sie com.mycompany.myapp durch 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.

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.


  1. Stellen Sie sicher, dass der Container läuft (nicht gestoppt)
  2. Klicken Sie auf Aktualisieren im Profiler-Panel
  3. Überprüfen Sie, ob der Container einen Java-Prozess enthält
  4. Führen Sie den Health Check aus, um sicherzustellen, dass GalataJ funktioniert
  1. Stellen Sie sicher, dass Sie eine Pro-Lizenz aktiviert haben
  2. Prüfen Sie, ob Docker auf Ihrem Rechner läuft
  3. 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-jdk

Empfohlene 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.


Upgrade auf Pro

Docker-Profilierung und mehr erhalten

Upgrade →

Sitzungsverlauf

Container-Leistung über Zeit vergleichen

Mehr erfahren →