You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 21中com.sun.tools.attach.VirtualMachine类未找到问题修复

问题修复与原因解析

一、警告与异常的根本原因

1. 警告WARNING: package jdk.attach not in java.base的原因

你参考的Java 11文档信息不适用于Java 21:Java 21中jdk.attach包已从java.base模块迁移到独立的jdk.attach模块。你的启动命令中指定--add-opens java.base/jdk.attach=ALL-UNNAMED,但该包实际不在java.base里,因此触发警告。

2. ClassNotFoundException: com.sun.tools.attach.VirtualMachine的原因

你使用的是eclipse-temurin:21-jre-jammy镜像,这是JRE(Java运行时环境),而com.sun.tools.attach.VirtualMachine属于JDK(Java开发工具包)专属的jdk.attach模块,JRE默认不包含该模块及相关工具类,导致类加载失败。

二、修复方案

方案1:切换到JDK镜像(推荐)

将Docker镜像替换为JDK版本,它包含完整的jdk.attach模块及所需工具类:

eclipse-temurin:21-jdk-jammy

方案2:修正启动参数(配合JDK镜像使用)

同时调整启动命令中的--add-opens参数,匹配Java 21的模块结构,并且补充主类到命令末尾:

java -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints \
--add-opens java.base/jdk.internal.misc=ALL-UNNAMED \
--add-opens java.base/java.lang=ALL-UNNAMED \
--add-opens java.base/java.nio=ALL-UNNAMED \
--add-opens java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens jdk.attach/jdk.attach=ALL-UNNAMED \
-Djdk.attach.allowAttachSelf -cp myapp.jar com.myns.cli

三、额外说明

clj-async-profiler依赖JDK的Attach API实现进程内性能分析,因此必须运行在JDK环境中,JRE无法满足其依赖需求。

内容的提问来源于stack exchange,提问作者user51

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 16:44:53