系统内存并不能反应JVM内存情况,经常碰到JVM内存满掉而系统内存大量空余的情况,或者是由于没有对JVM内存进行有效的监控导致无法及时获取应用最新使用状态;
jstat
gcutil
$JAVA_HOME/bin/jstat -gcutil VMID interval count
- 每隔1毫秒输出
$JAVA_HOME/bin/jstat -gcutil 3548 1
- 每隔1秒输出,且统计五次
$JAVA_HOME/bin/jstat -gcutil 3548 1000 5
➜ ~ $JAVA_HOME/bin/jstat -gcutil 3548
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 100.00 34.69 78.45 96.39 91.25 881491 30503.989 9 350.987 30854.976
取heap size 已使用量百分比值
➜ ~ $JAVA_HOME/bin/jstat -gcutil 3548|awk 'NR==2 {print $3}'
63.28
gccause
$JAVA_HOME/bin/jstat -gccause VMID interval count
gccapacity
$JAVA_HOME/bin/jstat -gccapacity VMID interval count
Jconsole
认证连接
JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=21812 \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=/etc/jmx/jmx-spark.password \
-Dcom.sun.management.jmxremote.access.file=/etc/jmx/jmx-spark.access \
-Dcom.sun.management.jmxremote.ssl=false"
- 密码文件示例: $JAVA_HOME/jre/lib/management
无认证连接
JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.manageme
nt.jmxremote.ssl=false"
客户端
Mac & Windowns 安装配置jdk 后执行jsconsole 即可