arthas的dashboard命令以汇总统计和实时趋势展示jvm gc概览,含ps scavenge与ps marksweep等次数及耗时,需结合mem区内存使用率判断异常,配合vmtool、jvm等命令深入分析。

Arthas 的 dashboard 命令能实时展示 JVM 运行概览,其中包含 GC 相关的关键指标,但要注意:它不直接显示每次 GC 的详细日志(如 CMS、G1 的阶段耗时),而是以**汇总统计 + 实时趋势**的方式呈现 GC 状态。
看懂 dashboard 里的 GC 栏目
执行 dashboard 后,界面底部会有一个 GC 区域,通常包含以下几列:
- PS Scavenge:年轻代 GC 次数和总耗时(单位 ms)
- PS MarkSweep:老年代 GC 次数和总耗时(单位 ms)
- (不同 GC 算法名称可能略有差异,比如 G1 会显示 G1 Young Generation 和 G1 Old Generation)
重点关注两个数字:次数(如 123)和耗时(如 1245ms)。如果某类 GC 次数突增或单次/累计耗时明显升高(比如 1 秒内年轻代 GC 多次、老年代 GC 耗时飙升),说明可能存在内存压力或配置问题。
结合内存使用判断 GC 是否异常
GC 状态不能孤立看。要同步观察 MEM 区域中的各内存池使用率:
- 年轻代(Eden/Survivor)使用率长期 >90% 且频繁回收 → 可能对象生命周期长、Survivor 区太小或 YGC 频繁
- 老年代使用率持续上升、配合 PS MarkSweep 次数增加 → 存在内存泄漏或晋升过快
- Metaspace 使用率接近上限且不断增长 → 类加载泄漏风险
例如:看到 PS MarkSweep: 5 times, 3287ms,同时老年代已用 95%,基本可判定发生了多次 Full GC,需立即排查。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
需要更细粒度?搭配其他命令补充
dashboard 是宏观视图,定位具体问题还需组合使用:
-
vmtool --action getInstances --className java.lang.ref.Finalizer --limit 5:查 Finalizer 队列堆积(可能拖慢 GC) -
jvm:确认当前 GC 算法、堆大小、是否启用 G1RemSetTracking 等关键参数 -
vmoption -XX:+PrintGCDetails(需提前开启):获取原始 GC 日志,dashboard无法替代它
注意:dashboard 默认 5 秒刷新一次,按 q 或 Ctrl+C 退出;想延长刷新间隔可用 dashboard -i 10000(单位毫秒)。
一个小技巧:快速对比前后变化
如果怀疑 GC 突然变差,可以:
- 先记下当前
PS Scavenge和PS MarkSweep的次数与耗时 - 等 30 秒再看一次,计算增量
- 若 30 秒内年轻代 GC 增加 10+ 次,或老年代 GC 增加 1 次,就值得深入了
这种简单对比比盯着瞬时值更有效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










