IntelliJ中Tomcat Profiling报错:jvm.dll未被目标进程加载
jvm.dll not loaded by target process错误的方案 检查Tomcat启动的JVM路径一致性
确保IntelliJ配置的Tomcat运行时JDK和实际启动Tomcat用的JDK完全匹配。打开IntelliJ的Run/Debug Configurations,找到你的Tomcat配置,查看「JRE」选项,确认指向的是Java11的完整安装路径,而非系统默认的可能冲突的JDK。同时检查Tomcat目录下的setenv.bat(如果有)里的JAVA_HOME配置,保证和IntelliJ里的路径一致,避免启动时加载了其他版本的JVM文件。以管理员身份运行IntelliJ
Windows权限限制可能导致jattach工具无法访问目标进程的JVM模块。右键点IntelliJ快捷方式,选「以管理员身份运行」,重启Tomcat后重新做profiling,试试停止时是否还报错。调整IntelliJ Profiler的代理设置
打开IntelliJ的Settings(File > Settings),进入Build, Execution, Deployment > Profiler,找到「Startup options」,尝试取消勾选「Use JVMTI agent for sampling」(如果用的是采样模式),或者切换Async Profiler的不同模式(比如从CPU采样切到内存分配采样)再测试。有时候代理注入会和Tomcat启动流程冲突,导致jvm.dll无法被正确识别。清理缓存文件
- 删除Tomcat的work目录:找到Tomcat安装目录下的
work文件夹,清空里面所有内容,避免旧编译文件干扰。 - 清除IntelliJ缓存:点击File > Invalidate Caches...,选择「Invalidate and Restart」,重启后重新配置Tomcat和Profiler。
- 删除Tomcat的work目录:找到Tomcat安装目录下的
排查杀毒软件拦截
Windows Defender或第三方杀毒软件可能会拦截jattach工具对进程的操作,导致读不到目标进程的JVM信息。暂时关闭实时保护,重新做profiling测试,确认是不是杀毒软件的问题。如果是,把IntelliJ安装目录、Tomcat安装目录、Java11安装目录加入杀毒软件白名单。手动指定Async Profiler路径(仅针对Async Profiler模式)
如果你用的是Async Profiler,手动下载适配Windows和Java11的版本,解压后在IntelliJ的Settings > Build, Execution, Deployment > Profiler > Async Profiler里,把「Async Profiler home」设为解压后的目录,然后重新测试。
内容的提问来源于stack exchange,提问作者Alexis Dufrenoy

