Perfilamento Docker
Recurso Pro
Perfilamento Docker requer uma licença Pro.
Perfile aplicações Java executando em contêineres Docker locais com descoberta automática.
Como Funciona
Seção intitulada “Como Funciona”GalataJ descobre automaticamente aplicações Java executando dentro de contêineres Docker na sua máquina local.
- Inicie seu contêiner Docker com uma aplicação Java
- Abra o painel Profiler no seu IDE
- Clique em Atualizar — contêineres Docker aparecem na lista de JVMs
- Selecione o contêiner e inicie o perfilamento
Nenhuma configuração necessária. GalataJ gerencia a conexão automaticamente.
JDK recomendado para conexão automática
Se seu contêiner usa uma imagem JDK, GalataJ se conecta automaticamente sem nenhuma configuração adicional. Se seu contêiner usa um JRE ou um JDK sem suporte a conexão, você ainda pode perfilar usando a abordagem -javaagent. Veja Alternativa: Usando -javaagent abaixo.
O Que É Descoberto
Seção intitulada “O Que É Descoberto”GalataJ encontra processos Java executando em:
- Docker Desktop (Windows/macOS)
- Docker Engine (Linux)
- Projetos Docker Compose
Enquanto o contêiner estiver executando na sua máquina local, GalataJ pode perfilá-lo.
Identificando Contêineres
Seção intitulada “Identificando Contêineres”Na lista de JVMs, contêineres Docker mostram:
- Nome do contêiner — O nome que você deu ao contêiner
- Nome da imagem — A imagem Docker sendo usada
- ID do contêiner — ID curto para identificação
Alternativa: Usando -javaagent
Seção intitulada “Alternativa: Usando -javaagent”Se a conexão automática não funcionar — por exemplo, seu contêiner usa uma imagem JRE ou um JDK que não suporta conexão em tempo de execução — você pode carregar o agente do profiler na inicialização usando -javaagent. Este método funciona com qualquer imagem Java, incluindo JRE.
Escolha uma das seguintes opções:
Opção 1: docker-compose.yml
Seção intitulada “Opção 1: docker-compose.yml”Adicione o seguinte à definição do seu serviço — nenhuma alteração no Dockerfile necessária:
services: my-app: # ... sua configuração existente ... 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"Depois reinicie seus serviços:
docker compose upOpção 2: Dockerfile
Seção intitulada “Opção 2: Dockerfile”Copie o JAR do agente para o diretório do seu projeto:
cp ~/.galataj/agent/agent.jar ./agent.jarDepois adicione estas linhas ao seu Dockerfile antes do ENTRYPOINT:
COPY agent.jar /opt/galataj-agent.jarENV JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar"ENV GALATAJ_PACKAGE=com.mycompany.myappOpção 3: docker run
Seção intitulada “Opção 3: docker run”Nenhuma alteração de arquivo necessária — passe a montagem de volume e variáveis de ambiente diretamente:
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-imageNotas Importantes
Seção intitulada “Notas Importantes”- Substitua
com.mycompany.myapppelo pacote base da sua aplicação (ex. o pacote que contém sua classe@SpringBootApplication). - No Linux, o parâmetro
extra_hosts(Compose) ou--add-host(docker run) é necessário para que o contêiner possa alcançar o host. Os exemplos acima já incluem isso. - Ao usar o assistente do IDE, o snippet gerado já vem com o pacote correto preenchido.
Limitações
Seção intitulada “Limitações”Apenas Local
GalataJ só pode perfilar contêineres Docker executando na sua máquina local. Hosts Docker remotos (SSH, API Docker remota) não são suportados atualmente.
Solução de Problemas
Seção intitulada “Solução de Problemas”Contêiner não aparece
Seção intitulada “Contêiner não aparece”- Certifique-se de que o contêiner está executando (não parado)
- Clique em Atualizar no painel do profiler
- Verifique se o contêiner tem um processo Java dentro
- Execute Health Check para garantir que GalataJ está funcionando
Perfilamento não inicia
Seção intitulada “Perfilamento não inicia”- Certifique-se de ter uma licença Pro ativada
- Verifique se Docker está executando na sua máquina
- Tente reiniciar seu IDE
Falha no attach: jdk.attach não disponível
Se você vir erros como:
- “jdk.attach module not available in container”
- “The container image must include JDK (not just JRE)”
- “NoClassDefFoundError: com/sun/tools/attach/AttachNotSupportedException”
o contêiner está usando uma imagem JRE ou um JDK sem suporte a conexão.
Solução A — Mudar para uma imagem JDK:
# Antes (falha para conexão automática)FROM eclipse-temurin:17-jre
# Depois (funciona com GalataJ)FROM eclipse-temurin:17-jdkImagens JDK recomendadas: eclipse-temurin:17-jdk, amazoncorretto:17, azul/zulu-openjdk:17.
Reconstrua a imagem e execute o contêiner novamente, então inicie o perfilamento.
Solução B — Usar -javaagent em vez disso:
Se você não pode mudar para uma imagem JDK, use a abordagem -javaagent que funciona com qualquer imagem Java, incluindo JRE. Veja Alternativa: Usando -javaagent acima.