JVM监控利器:jstat命令全方位详解

摘要:本文深入解析Java虚拟机(JVM)的核心监控工具/* by yours.tools - online tools website : yours.tools/zh/rc4encrypt.html */ jstat,涵盖12种关键监控场景,助力开发者精准诊断内存、GC及类加载问题。


📊 1. 类加载与卸载监控(-class)

命令/* by yours.tools - online tools website : yours.tools/zh/rc4encrypt.html */ jstat -class <pid>
输出字段

  • Loaded:已加载类总数
  • Bytes:加载类占用的字节数
  • Unloaded:卸载的类数量
  • Time:类加载/卸载总耗时(秒)
    问题诊断
  • 类泄漏Loaded 持续上升且 Unloaded 接近 0,可能是动态代理或反射滥用导致。
  • 优化建议:限制元空间大小(-XX:MaxMetaspaceSize),检查代码中重复类加载逻辑。

🧠 2. JIT 编译监控(-compiler)

命令jstat -compiler <pid>
输出字段

  • Compiled:成功编译的方法数
  • Failed:编译失败的方法数
  • Invalid:无效编译数(需重新编译的方法)
    问题诊断
  • 编译失败Failed > 0 表明存在热点方法无法优化(如复杂循环或异常分支)。
  • 优化建议:检查 FailedMethod 列定位问题方法,简化逻辑或排除编译异常。

🔄 3. GC 行为全景监控(-gc)

命令jstat -gc <pid> 1000 5(每秒采样,共5次)
核心字段

区域容量字段使用字段
EdenECEU
SurvivorS0C/S1CS0U/S1U
老年代OCOU
元空间MCMU
GC 统计YGC(Young GC 次数)、FGC(Full GC 次数)、GCT(GC 总耗时)。
典型问题
  • Eden 区溢出EU 频繁接近 EC → Young GC 频繁(增大 -Xmn)。
  • 老年代满OU 持续增长且 FGC 增加 → 内存泄漏(检查对象生命周期)。

📈 4. 堆内存使用率监控(-gcutil)

命令jstat -gcutil <pid> 1s
输出字段(百分比形式):

  • E:Eden 区使用率
  • O:老年代使用率
  • M:元空间使用率
  • YGC/FGC:GC 次数
    诊断场景
  • 老年代压力O > 90%FGC 增长 → 可能触发 Full GC(调整 -Xmx 或换 G1/ZGC)。
  • 元空间溢出M ≈ 100% → 动态类生成过多(限制 -XX:MaxMetaspaceSize)。

⚖️ 5. 堆内存容量分析(-gccapacity)

命令jstat -gccapacity <pid>
关键字段

  • NGCMN/NGCMX:新生代最小/最大容量
  • OGCMN/OGCMX:老年代最小/最大容量
  • MCMN/MCMX:元空间最小/最大容量
    用途
  • 观察 JVM 动态扩容行为(如 OC 增长),判断是否因堆过小导致频繁扩容。

🕵️ 6. GC 原因追踪(-gccause)

命令jstat -gccause <pid> 1s
扩展字段(在 -gcutil 基础上):

  • LGCC:最近一次 GC 的原因(如 Allocation Failure
  • GCC:当前 GC 原因(如 No GC
    典型原因
  • Allocation Failure:Eden 区满触发 Young GC。
  • System.gc():代码中显式调用 GC(避免使用)。

👶 7. 新生代详细分析(-gcnew)

命令jstat -gcnew <pid>
关键字段

  • TT:对象晋升老年代的年龄阈值
  • MTT:对象最大存活年龄
  • DSS:期望的 Survivor 区大小
    优化方向
  • 对象过早晋升TT 过小 → 增大 -XX:MaxTenuringThreshold 让对象在新生代多存活几轮 GC。

👴 8. 老年代与元空间分析(-gcold)

命令jstat -gcold <pid>
核心字段

  • OU:老年代使用量
  • MU:元空间使用量
  • FGCT:Full GC 总耗时
    问题定位
  • Full GC 频繁OU 持续高位 → 检查大对象或内存泄漏(使用 jmap 生成堆转储)。

📦 9. 元空间容量监控(-gcmetacapacity)

命令jstat -gcmetacapacity <pid>
字段MCMN(最小元空间)、MCMX(最大元空间)、MC(当前元空间)
配置建议

  • 设置 -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m 避免元空间无限增长。

🔍 10. 新生代内存容量(-gcnewcapacity)

命令jstat -gcnewcapacity <pid>
字段NGCMN/NGCMX(新生代最小/最大容量)、EC(Eden 当前容量)
调优场景

  • Eden 区过小导致频繁 Young GC → 增大 -Xmn(新生代大小)。

11. 老年代内存容量(-gcoldcapacity)

命令jstat -gcoldcapacity <pid>
字段OGCMN/OGCMX(老年代最小/最大容量)、OGC(当前老年代容量)
诊断

  • 老年代容量不足触发 Full GC → 增加 -Xmx 或降低新生代与老年代比例。

📉 12. 方法区监控(-printcompilation)

命令jstat -printcompilation <pid>
字段Compiled(编译次数)、Size(方法字节码大小)、Method(方法名)
用途

  • 识别 JIT 编译的热点方法,优化其性能(如内联或循环展开)。

⚙️ 调优总结与工具链整合

场景关键命令优化动作
Young GC 频繁jstat -gcutil增大 -Xmn,调整 -XX:SurvivorRatio
Full GC 频繁jstat -gccause增大堆内存,换 G1/ZGC,修复内存泄漏
元空间溢出jstat -gcmetacapacity限制 -XX:MaxMetaspaceSize
类加载泄漏jstat -class检查动态代理,限制类加载器作用域

💎 最佳实践建议

  1. 自动化监控:通过 Shell 脚本定期采集 jstat 数据,结合 grep/awk 分析异常阈值并触发告警。
  2. 多工具联动
    • jmap 导出堆转储分析大对象(jmap -dump:format=b,file=heap.hprof <pid>)。
    • jstack 抓取线程快照排查死锁(jstack <pid> > thread.txt)。
  3. 可视化分析:上传 GC 日志到 https://gceasy.io 生成吞吐量、延迟报告。

通过这 12 个场景的深度监控,可覆盖 90% 的 JVM 性能问题。记住黄金法则:优先让对象在新生代回收(减少 FGC),避免老年代积压。

本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/19027073

无界云图(开源在线图片编辑器源码)是由四川爱趣五科技推出的一款类似可画、创客贴、图怪兽的在线图片编辑器。该项目采用了React Hooks、Typescript、Vite、Leaferjs等主流技术进行开发,旨在提供一个开箱即用的图片编辑解决方案。项目采用 MIT 协议,可免费商用。 无界云图提供了一系列强大的图片编辑功能,包括但不限于: 素材管理:支持用户上传、删除和批量管理素材。 操作便捷:提供右键菜单,支持撤销、重做、导出图层、删除、复制、剪切、锁定、上移一层、下移一层、置顶、置底等操作。 保存机制:支持定时保存,确保用户的工作不会丢失。 主题切换:提供黑白主题切换功能,满足不同用户的视觉偏好。 多语言支持:支持多种语言,方便全球用户使用。 快捷键操作:支持快捷键操作,提高工作效率。 产品特色 开箱即用:无界云图采用了先进的前端技术,用户无需进行复杂的配置即可直接使用。 免费商用:项目采用MIT协议,用户可以免费使用和商用,降低了使用成本。 技术文档齐全:提供了详细的技术文档,包括技术文档、插件开发文档和SDK使用文档,方便开发者进行二次开发和集成。 社区支持:提供了微信技术交流群,用户可以在群里进行技术交流和问题讨论。 环境要求 Node.js:需要安装Node.js环境,用于运行和打包项目。 Yarn:建议使用Yarn作为包管理工具,用于安装项目依赖。 安装使用 // 安装依赖 yarn install // 启动项目 yarn dev // 打包项目 yarn build 总结 无界云图是一款功能强大且易于使用的开源在线图片编辑器。它不仅提供了丰富的图片编辑功能,还支持免费商用,极大地降低了用户的使用成本。同时,详细的文档和活跃的社区支持也为开发者提供了便利的二次开发和集成条件。无论是个人用户还是企业用户,都可以通过无界云图轻
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值