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

为何VisualVM工具无法显示EC2 Tomcat实例JVM的jstatd监控数据

可能原因
  • JDK版本不匹配:本地VisualVM的运行JDK版本、VisualGC插件版本,和远端EC2上Tomcat使用的JDK大版本不兼容。比如远端运行JDK 17,本地VisualVM基于JDK 8打包,即使JMX连接正常,jstat协议的版本差异也会导致VisualGC无法识别远端JVM的内存结构,触发不支持提示。
  • 目标JVM禁用了性能数据采集:如果Tomcat对应的JVM启动时添加了-XX:-UsePerfData参数,会关闭性能统计数据生成,jstatd无法读取到GC相关的统计信息,就会返回不支持提示。另外如果JVM指定了-XX:PerfDataSavePath自定义路径,jstatd进程没有该路径的读取权限,也会出现同样的问题。
  • jstatd和目标JVM运行用户不一致:你用sudo以root身份启动jstatd,但Tomcat JVM如果是普通用户(比如tomcat、ec2-user)运行的,默认生成的性能数据文件存在/tmp/hsperfdata_<运行用户名>目录下,root用户如果没有该目录的读取权限,或者因为权限隔离无法访问其他用户的临时文件,就会导致jstatd拿不到数据。
  • EC2安全组端口限制:jstatd默认监听1099端口做RMI注册,还会随机启用一个额外的端口做数据传输。如果你的EC2安全组只放开了1099端口,没有放开随机端口的入站规则,VisualGC只能完成基础握手,无法拉取GC数据,就会提示不支持。你可以启动jstatd时加上-p <固定端口号>参数指定数据传输端口,再把安全组的1099和该固定端口都放开即可。
  • VisualGC插件版本过旧:本地VisualVM安装的VisualGC插件版本太低,不兼容远端JVM的版本,比如远端用了JDK 21,插件仅支持到JDK 11,就会触发兼容报错。你可以在VisualVM的插件管理页面检查更新,将VisualGC升级到最新版本后重试。
  • 远端JDK为精简版本:如果远端EC2上安装的是无头版、精简版OpenJDK,没有内置jstat相关的性能统计模块,也会导致jstatd无法读取GC数据。你可以直接在EC2命令行执行jstat -gc <Tomcat进程ID>验证,如果输出正常就排除该问题,如果报错可以替换为完整版OpenJDK或OracleJDK。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:06:04