Java实时监控常用指令、工具
监控堆内存、栈内存、元空间等内存区域的使用情况,下面是几个常用方式(手动),
每种垃圾回收器的JVM内存模型都有所差别,展现的指标参数也有不同
jcmd命令
jcmd [进程号] GC.heap_info
从中可以清楚的看到,我用的Parallel 垃圾回收器以及它年轻代、老年代、元空间的内存使用情况。
jstat命令
jstat -gc [进程号]
指标解释 :
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1536.0 1536.0 1312.0 0.0 94208.0 67666.3 84480.0 32556.4 60696.0 59214.3 6448.0 6084.6 154 0.868 3 0.576 1.443
S0C: Survivor 0 区容量 (单位: K) S0C: Survivor 0 区容量 (单位: K)
S1C: Survivor 1 区容量 (单位: K) S1C: Survivor 1 区容量 (单位: K)
S0U: Survivor 0 区已使用 (单位: K) S0U: Survivor 0 区已使用 (单位: K)
S1U: Survivor 1 区已使用 (单位: K) S1U: Survivor 1 区已使用 (单位: K)
EC: Eden 区容量 (单位: K) EC: Eden 区容量 (单位: K)
EU: Eden 区已使用 (单位: K) EU: Eden 区已使用 (单位: K)
OC: Old 区容量 (单位: K) OC: Old 区容量 (单位: K)
OU: Old 区已使用 (单位: K) OU: Old 区已使用 (单位: K)
MC: Metaspace 区容量 (单位: K) MC: Metaspace 区容量 (单位: K)
MU: Metaspace 区已使用 (单位: K) MU: Metaspace 区已使用 (单位: K)
CCSC: 类空间容量 (单位: K) CCSC: 类空间容量 (单位: K)
CCSU: 类空间已使用 (单位: K) CCSU: 类空间已使用 (单位: K)
YGC: 年轻代垃圾回收次数 YGC: 年轻代垃圾回收次数
YGCT: 年轻代垃圾回收耗时 (单位: 秒) YGCT: 年轻代垃圾回收耗时 (单位: 秒)
FGC: 完全垃圾回收次数 FGC: 完全垃圾回收次数
FGCT: 完全垃圾回收耗时 (单位: 秒) FGCT: 完全垃圾回收耗时 (单位: 秒)
GCT: 总垃圾回收耗时 (单位: 秒) GCT: 总垃圾回收耗时 (单位: 秒)
也可以用watch命令进行实时监控(watch命令就是系统定时执行命令的)
这个代表1秒自动调用命令一次刷新shell显示的内容,可以看到每次都有数值在变化
watch -n 1 "jstat -gc [进程号]"
jconsole
windows版本
Linux:(系统得有图形化界面)
可连接本地进程或远程进程,本次用本地进程演示,可以很直观的看出内存区域、线程、启动命令、回收器类型等实时统计信息
JvisualVM
打开方式
配置好JAVA_HOME、PATH环境变量的电脑直接敲运行命令即可
还是连接一个本地的Java进程,可以看到内存使用情况、线程的状态、热点方法执行的CPU耗时实时统计、类型对象占用内存的实时统计等信息,和jconsole一样也可以点击按钮执行GC操作。
jmc
打开方式
有环境变量的话也是可以直接输入jmc在运行里打开
这种就是对图形化支持很好的监控工具,具有仪表盘等动态功能,可以监控线程、对象、CPU、内存使用情况和垃圾回收情况