1. 配置jvm启动参数
在使用jconsole监控jvm之前,首先需要先打开jmx。启动jvm时,添加以下参数。jmx通过58088端口对外开放。
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=58088 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
2.启动jconsole
找到jdk安装的目录,在 $INSTALL_PATH/bin 目录下,执行 ./jconsole
3.配置jmx 连接信息
填写机器IP地址,及jmx端口。
点击连接,即可打开jconsole 可视化界面,对java 应用运行情况进行分析。
4.查看分析
4.1 概览
在概览页面,可以查看堆内存、线程、类、CPU占用率等信息。
4.2 内存
内存页面,可以查看JVM各个区域内存使用情况。包括:堆内存PS Old Gen、PS Eden Space、PS Survivor Space、Metaspace、Code Cache、Compressed Class Space.
4.2.1 堆内存使用量
PS Old Gen 区
老年代内存占用情况,老年代存放经过多次年轻代垃圾回收都没有回收掉的对象。与此同时,对于大对象的分配内存,也是存放在老年代。大对象判断阈值:-XX:PretenureSizeThreshold=0 ** 默认值是0,意味着任何对象都会现在新生代分配内存。**
PS Eden Space 区
新生代内存占用情况,新创建的对象,都是在堆内存年轻代分配。
PS Survivor Space 区
幸存者区内存占用情况,存放年轻代垃圾回收时被标记对象,两个survivor区用于复制算法。
4.2.2 非堆内存使用量
Metaspace
元空间区
Code cache
代码缓存区,它缓存的是JIT(Just in Time)编译器编译的代码,简言之codeCache是存放JIT生成的机器码(native code)。
当然JNI(Java本地接口)的机器码也放在codeCache里,不过JIT编译生成的native code占主要部分。
字节码编译:.java -> .class
机器码编译:.class -> JIT 机器码
JVM 执行一段class字节码,分两种方式:解释执行 和 编译执行。
解释执行是指,在执行字节码时,逐行解释成机器码,然后再执行。
编译执行是指,提前将经常被调用(达到一定次数)的方法字节码编译成功机器码,并进行各层次的优化,提升执行效率,缓存至codeCache里,避免重复编译。
Compressed Class Space
压缩类空间。
4.3 线程
4.4 类
4.5 VM概览
4.6 MBean
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)