跳转到内容

Docker 性能分析

专业版功能

Docker 性能分析需要 专业版许可证

通过自动发现,分析运行在本地 Docker 容器中的 Java 应用程序。


GalataJ 自动发现在您本地机器的 Docker 容器中运行的 Java 应用程序。

  1. 使用 Java 应用程序启动您的 Docker 容器
  2. 在 IDE 中打开 Profiler 面板
  3. 点击刷新 — Docker 容器将出现在 JVM 列表中
  4. 选择容器并开始分析

无需配置。 GalataJ 自动处理连接。

推荐使用 JDK 以实现自动连接

如果您的容器使用 JDK 镜像,GalataJ 无需任何额外配置即可自动连接。如果您的容器使用 JRE 或不支持连接的 JDK,您仍然可以通过 -javaagent 方式进行分析。请参阅下方的替代方案:使用 -javaagent


GalataJ 可以找到运行在以下环境中的 Java 进程:

  • Docker Desktop(Windows/macOS)
  • Docker Engine(Linux)
  • Docker Compose 项目

只要容器在您的本地机器上运行,GalataJ 就可以对其进行分析。


在 JVM 列表中,Docker 容器显示:

  • 容器名称 — 您给容器起的名称
  • 镜像名称 — 正在使用的 Docker 镜像
  • 容器 ID — 用于识别的短 ID

如果自动连接不起作用——例如,您的容器使用 JRE 镜像或不支持运行时连接的 JDK——您可以在启动时使用 -javaagent 加载分析器代理。此方法适用于任何 Java 镜像,包括 JRE

选择以下选项之一:

将以下内容添加到您的服务定义中——无需修改 Dockerfile:

services:
my-app:
# ... 您现有的配置 ...
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"

然后重启您的服务:

Terminal window
docker compose up

将代理 JAR 复制到您的项目目录:

Terminal window
cp ~/.galataj/agent/agent.jar ./agent.jar

然后在 Dockerfile 的 ENTRYPOINT 之前添加以下行:

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

无需修改文件——直接传递卷挂载和环境变量:

Terminal window
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
  • com.mycompany.myapp 替换为您应用程序的基础包(例如,包含 @SpringBootApplication 类的包)。
  • Linux 上,extra_hosts(Compose)或 --add-host(docker run)参数是必需的,以便容器可以访问宿主机。上述示例已包含此设置。
  • 使用 IDE 向导时,生成的代码片段已自动填入正确的包名。

仅限本地

GalataJ 只能分析在您本地机器上运行的 Docker 容器。目前不支持远程 Docker 主机(SSH、远程 Docker API)。


  1. 确保容器正在运行(未停止)
  2. 在分析器面板中点击刷新
  3. 验证容器内有 Java 进程
  4. 运行 Health Check 以确保 GalataJ 正常工作
  1. 确保您已激活 专业版许可证
  2. 检查 Docker 是否在您的机器上运行
  3. 尝试重启您的 IDE

附加失败:jdk.attach 不可用

如果您看到如下错误:

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

说明容器使用的是 JRE 镜像或不支持连接的 JDK。

方案 A — 切换到 JDK 镜像:

# 之前(自动连接失败)
FROM eclipse-temurin:17-jre
# 之后(与 GalataJ 兼容)
FROM eclipse-temurin:17-jdk

推荐的 JDK 镜像:eclipse-temurin:17-jdkamazoncorretto:17azul/zulu-openjdk:17

重新构建镜像并再次运行容器,然后开始分析。

方案 B — 改用 -javaagent:

如果无法切换到 JDK 镜像,请使用 -javaagent 方式,该方式适用于任何 Java 镜像,包括 JRE。请参阅上方的替代方案:使用 -javaagent


升级到专业版

获取 Docker 分析及更多功能

升级 →

会话历史

随时间比较容器性能

了解更多 →