JVM调优你居然不会看JConsole
1.什么是JConsole?
Jconsole (Java Monitoring and Management Console),一种基于JMX的可视化监视、管理工具。
JConsole 是从java开始引入的一个java性能分析器,可以从命令行或在 GUI shell 中运行来监控jvm运行的情况
2.如何启动?
两种方式启动:
- 1.java 安装目录JDK目录下/bin里面 jconsole.exe 双击运行
- 2.打开cmd 直接运行: jconsole
然后会弹出一个可视化界面如下:
3.介绍如何使用和查看参数
上图是我本地启动了一个springboot项目,来进行测试,如上图MailApplication,选择后点击链接,点击不安全链接,成功后进入如下页面
在tab页面可以看到一些相关的选项卡:
概览 内存 线程 类 vm 概要 Mbean
3.1 概览介绍
概览里有(可按照时间范围):
堆内存: 已经使用情况 已经提交 最大情况
线程: 有活动 峰值 总计
类: 已经加载 已卸载 总计
cpu 占用率
3.2 内存
内存的话要注意三个地方,如上图
内存使用量
- 非堆内存使用量:即为内存使用情况
- 内存池"PS Old Gen" : JVM的老年代
- 内存池"PS Eden Space": JVM的年轻代,当一个对象new 出来后会在Eden Space ,直到GC到来,GC会逐一问清楚每个对象是否存在引用,进入Survivor Space(幸存区)没有引用将被kill。
- 内存池 “PS Survivor Space”:幸存区,幸存者区的对象可以活段时间,GC会定期(可以自定义)会对这些对象进行访问,如果该对象的引用不存在了将被kill,如果每次访问该对象都存在引用,将被转移到老年代。(用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。)
- 内存池"Metaspace" :元空间,大部分类元数据都在本地内存中分配。用于描述类元数据的“klasses”已经被移除。默认情况下,类元数据只受可用的本地内存限制(容量取决于是32位或是64位操作系统的可用虚拟内存大小)。
- 内存池"Code Cache":代码缓存区。HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存。
- 内存池"Compressed Class Space": 压缩空间
执行GC:点击可以执行GC操作
详细信息:即为每个选项的详细参数
3.3 线程
如上图所示: 左下角显示所有的活动线程,(如果线程过多,可以在下面的过滤栏中输入字符串过滤出你想要观察的线程)。点击某个显示会显示这个线程的名称、状态、阻塞和等待的次数、堆栈的信息.
3.4 类
**类如上图包括:**已经加载当前类,已经加载类总数,已经卸载类总数
3.5 VM
VM 的话就不多解释,上面已很详细了,注意这里可以查看当前选择的垃圾收集器(有次面试被问到)
垃圾收集器:
名称 = ‘PS MarkSweep’, 收集 = 4, 总花费时间 = 0.413 秒
垃圾收集器:
名称 = ‘PS Scavenge’, 收集 = 11, 总花费时间 = 0.125 秒
3.6 Mbean
如上图所示,“MBeans”选项卡以通用方式显示有关在平台MBean服务器中注册的所有MBean的信息。MBeans选项卡允许您访问整套平台MXBean工具,包括在其他选项卡中不可见的工具。另外,您可以使用MBeans选项卡监视和管理应用程序的MBean。
左边的树显示当前正在运行的所有MBean。当您在树中选择一个MBean,它的MBeanInfo和MBean描述都显示在右侧,和任何属性,操作或通知出现在其下方的树。
参考:https://www.cnblogs.com/silyvin/p/10246865.html
https://www.cnblogs.com/grey-wolf/p/9217497.html
https://blog.****.net/dshf_1/article/details/103422963?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-4