Docker 性能分析
专业版功能
Docker 性能分析需要 专业版许可证。
通过自动发现,分析运行在本地 Docker 容器中的 Java 应用程序。
GalataJ 自动发现在您本地机器的 Docker 容器中运行的 Java 应用程序。
- 使用 Java 应用程序启动您的 Docker 容器
- 在 IDE 中打开 Profiler 面板
- 点击刷新 — Docker 容器将出现在 JVM 列表中
- 选择容器并开始分析
无需配置。 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
替代方案:使用 -javaagent
Section titled “替代方案:使用 -javaagent”如果自动连接不起作用——例如,您的容器使用 JRE 镜像或不支持运行时连接的 JDK——您可以在启动时使用 -javaagent 加载分析器代理。此方法适用于任何 Java 镜像,包括 JRE。
选择以下选项之一:
选项 1:docker-compose.yml
Section titled “选项 1:docker-compose.yml”将以下内容添加到您的服务定义中——无需修改 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"然后重启您的服务:
docker compose up选项 2:Dockerfile
Section titled “选项 2:Dockerfile”将代理 JAR 复制到您的项目目录:
cp ~/.galataj/agent/agent.jar ./agent.jar然后在 Dockerfile 的 ENTRYPOINT 之前添加以下行:
COPY agent.jar /opt/galataj-agent.jarENV JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar"ENV GALATAJ_PACKAGE=com.mycompany.myapp选项 3:docker run
Section titled “选项 3:docker run”无需修改文件——直接传递卷挂载和环境变量:
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)。
- 确保容器正在运行(未停止)
- 在分析器面板中点击刷新
- 验证容器内有 Java 进程
- 运行 Health Check 以确保 GalataJ 正常工作
- 确保您已激活 专业版许可证
- 检查 Docker 是否在您的机器上运行
- 尝试重启您的 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-jdk、amazoncorretto:17、azul/zulu-openjdk:17。
重新构建镜像并再次运行容器,然后开始分析。
方案 B — 改用 -javaagent:
如果无法切换到 JDK 镜像,请使用 -javaagent 方式,该方式适用于任何 Java 镜像,包括 JRE。请参阅上方的替代方案:使用 -javaagent。