Aller au contenu

Profilage Docker

Fonctionnalité Pro

Le profilage Docker nécessite une licence Pro.

Profilez des applications Java s’exécutant dans des conteneurs Docker locaux avec découverte automatique.


GalataJ découvre automatiquement les applications Java s’exécutant dans des conteneurs Docker sur votre machine locale.

  1. Démarrez votre conteneur Docker avec une application Java
  2. Ouvrez le panneau Profiler dans votre IDE
  3. Cliquez sur Actualiser — Les conteneurs Docker apparaissent dans la liste des JVMs
  4. Sélectionnez le conteneur et démarrez le profilage

Aucune configuration nécessaire. GalataJ gère la connexion automatiquement.

JDK recommandé pour l'attachement automatique

Si votre conteneur utilise une image JDK, GalataJ s’attache automatiquement sans aucune configuration supplémentaire. Si votre conteneur utilise un JRE ou un JDK sans support d’attachement, vous pouvez toujours profiler en utilisant l’approche -javaagent. Voir Alternative : Utiliser -javaagent ci-dessous.


GalataJ trouve les processus Java s’exécutant dans :

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

Tant que le conteneur s’exécute sur votre machine locale, GalataJ peut le profiler.


Dans la liste des JVMs, les conteneurs Docker affichent :

  • Nom du conteneur — Le nom que vous avez donné au conteneur
  • Nom de l’image — L’image Docker utilisée
  • ID du conteneur — ID court pour l’identification

Si l’attachement automatique ne fonctionne pas — par exemple, votre conteneur utilise une image JRE ou un JDK qui ne supporte pas l’attachement à l’exécution — vous pouvez charger l’agent du profiler au démarrage avec -javaagent. Cette méthode fonctionne avec n’importe quelle image Java, y compris JRE.

Choisissez l’une des options suivantes :

Ajoutez ce qui suit à la définition de votre service — aucune modification du Dockerfile nécessaire :

services:
my-app:
# ... votre configuration existante ...
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"

Puis redémarrez vos services :

Fenêtre de terminal
docker compose up

Copiez le JAR de l’agent dans votre répertoire de projet :

Fenêtre de terminal
cp ~/.galataj/agent/agent.jar ./agent.jar

Puis ajoutez ces lignes à votre Dockerfile avant le ENTRYPOINT :

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

Aucune modification de fichier nécessaire — passez le montage de volume et les variables d’environnement directement :

Fenêtre de terminal
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
  • Remplacez com.mycompany.myapp par le package de base de votre application (ex. le package contenant votre classe @SpringBootApplication).
  • Sur Linux, le paramètre extra_hosts (Compose) ou --add-host (docker run) est requis pour que le conteneur puisse atteindre l’hôte. Les exemples ci-dessus l’incluent déjà.
  • Lorsque vous utilisez l’assistant IDE, le snippet généré contient déjà le bon package.

Local Uniquement

GalataJ ne peut profiler que les conteneurs Docker s’exécutant sur votre machine locale. Les hôtes Docker distants (SSH, API Docker distante) ne sont pas actuellement supportés.


  1. Assurez-vous que le conteneur est en cours d’exécution (pas arrêté)
  2. Cliquez sur Actualiser dans le panneau du profiler
  3. Vérifiez que le conteneur contient un processus Java
  4. Exécutez Health Check pour vous assurer que GalataJ fonctionne
  1. Assurez-vous d’avoir une licence Pro activée
  2. Vérifiez que Docker s’exécute sur votre machine
  3. Essayez de redémarrer votre IDE

Échec de l’attachement : jdk.attach non disponible

Si vous voyez des erreurs comme :

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

le conteneur utilise une image JRE ou un JDK sans support d’attachement.

Solution A — Passer à une image JDK :

# Avant (échoue pour l'attachement automatique)
FROM eclipse-temurin:17-jre
# Après (fonctionne avec GalataJ)
FROM eclipse-temurin:17-jdk

Images JDK recommandées : eclipse-temurin:17-jdk, amazoncorretto:17, azul/zulu-openjdk:17.

Reconstruisez l’image et relancez le conteneur, puis démarrez le profilage.

Solution B — Utiliser -javaagent à la place :

Si vous ne pouvez pas passer à une image JDK, utilisez l’approche -javaagent qui fonctionne avec n’importe quelle image Java, y compris JRE. Voir Alternative : Utiliser -javaagent ci-dessus.


Passer à Pro

Obtenez le profilage Docker et plus

Passer à Pro →

Historique des Sessions

Comparez les performances du conteneur dans le temps

En savoir plus →