JVM调优你居然不会看JConsole

本文详细介绍JConsole工具,涵盖启动方式、界面解读及各模块功能,包括概览、内存、线程、类、VM和Mbean的监控与管理,是Java性能分析与优化的实用指南。

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,如果每次访问该对象都存在引用,且次数age 大于15次,将被转移到老年代。(用于保存在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.youkuaiyun.com/dshf_1/article/details/103422963?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-4

### 使用 JConsole 进行 JVM 性能 #### 一、启动并连接至目标 Java 应用程序 JConsole 是 JDK 自带的一个图形化监控工具,用于监视正在运行的本地或远程 Java 虚拟机实例。要使用此工具来进行性能工作,需先确保被监测的应用已正确配置以便接受来自外部管理接口的数据请求。 对于本地进程而言,在命令提示符下输入 `jconsole` 即可打开该软件界面;而对于网络上的其他机器,则可能需要额外设置安全策略文件来允许跨主机访问[^1]。 #### 二、查看概览页面中的基本信息 一旦成功建立了与指定 JVM 的连接之后,用户便可以在“概述”标签页里获取有关堆栈大小变化趋势图、线程活动统计表以及类装载数目等多项重要指标的信息展示。这些数据有助于初步判断是否存在潜在瓶颈所在之处。 #### 三、深入分析内存分配模式 切换到“内存”选项卡后可以看到更详细的垃圾收集行为记录,包括 Eden Space Survivor Spaces 中的对象创建频率及其存活周期长度分布状况等细节描述。这一步骤对于识别是否有过多短生命周期对象频繁触发 Minor GC 或者 Full GC 非常有帮助,进而指导整初始新生代容量参数 `-Xmn` 及其比例关系 `-XX:SurvivorRatio` 来达到更好的吞吐量表现效果[^2]。 ```bash java -Xms512m -Xmx1024m -Xmn256m -XX:SurvivorRatio=8 MyApplication ``` #### 四、诊断线程死锁及其他异常情况 当遇到多线程并发执行时产生的问题时,“线程”面板就显得尤为重要了——这里列出了当前所有活跃线程的状态快照,并支持导出完整的跟踪日志供进一步排查原因之用。如果发现某些特定场景下的阻塞现象较为严重的话,则可以通过修改同步机制设计思路或是引入无锁算法等方式加以改进。 #### 五、利用插件扩展功能集 值得注意的是,除了上述基本特性之外,官方还提供了丰富的第三方插件库可供下载安装,从而满足不同业务需求下的定制化要求。例如 MBeans 浏览器能够让管理员更加直观地操作托管资源属性值;而 VisualGC 则专注于呈现更为精细粒度级别的 Garbage Collection 日志解析视图给开发者参考学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值