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。