当前位置: 首页 > news >正文

JVM学习日记(十六)Day16——性能监控与调优(三)

这一篇主包会介绍JVM性能监控的图形化界面,使用图形化界面会比使用命令行更加的直观一些,最主要的其实是不需要去记命令了,以及可以看到更加详细的信息。但是主包认为还是要以命令行为主,因为不是所有的场景都可以使用图形化界面的,所以具备JVM优化能力肯定是指在任何情况下都可以完成业务需求的水平,过度依赖其实只会让大火的技术水平止步不前。有时间主包也会出一期解析命令行源码的文章,让大家知道所谓的命令到底是怎么实现的、又是怎么做到的,这个才是一个技术应该做的事情,过度依赖中间件虽然让工作更加简单易上手,但是对自身没有任何的提升。

JDK内置工具

  • JConsole

JDK 自带的监控工具,支持查看堆内存、线程、类加载、MBean 等。启动命令:jconsole(在 JDK 的 bin 目录下)。适合基础监控,但功能较简单。这个其实可以作为一个常规的性能监控工具,因为UI设计简单清晰,看起来所有数据都是一目了然的,并不复杂。确定就是功能单一了只能进行简单的监控,有兴趣的小伙伴快去试一试,JConsole:Java性能监控与管理工具详解-CSDN博客

  • VisualVM

JDK 官方提供的增强版工具(需单独下载,JDK 9+ 后独立分发)。支持内存/CPU 分析、线程快照、堆转储分析、JMX 监控等。插件扩展:可安装 ​Visual GC​ 插件实时观察 GC 分代情况。

  • Java Mission Control (JMC)​

Oracle 官方工具(需商业授权用于生产环境,但开发/测试环境免费)。功能有

JMX 控制台​:实时监控 JVM 指标。飞行记录器 (JFR)​​:低开销采集性能事件(GC、锁竞争等)。启动命令:jmc(需安装 JDK 的 jdk.jmc 模块)。

2. 第三方工具

  • Eclipse Memory Analyzer (MAT)​

  • 专用于分析堆转储文件(.hprof),定位内存泄漏。功能:对象支配树、泄漏报告、OQL 查询等。

  • JProfiler​(推荐)

    商业工具,提供全面的 CPU、内存、线程分析。特点就是支持远程连接和快照对比。实时调用树、内存分配追踪、数据库 SQL 分析。
  • YourKit

另一款商业工具,性能分析精准,支持多种 JVM 语言(Java/Kotlin/Scala)。

  • GCViewer

    • 可视化分析 GC 日志工具,支持 -Xloggc 或 -Xlog:gc* 生成的日志。
    • 官网:GCViewer GitHub。

 JProfiler

本篇主要介绍JProfiler,主要是功能太强大了,比前面说到的都要强大,毕竟人家是收费的。
链接:https://pan.quark.cn/s/89b22a482b90
提取码:gHDz

主包这边只有mac版本的,所以window的小伙伴还是去其他地方找找资源吧。这个是整合的教程,主包就不给大家出安装教程了,大火自己看看吧。Java JVM分析利器JProfiler 结合IDEA使用详细教程_jprofiler使用教程-CSDN博客

 JProfiler 的数据采集方式概览

 Instrumentation(插桩)​
JProfiler 在 JVM 加载类时,动态修改字节码,在方法的入口和出口插入监控代码(类似 AOP),记录每次方法调用的耗时、参数、返回值等。特点​就是记录所有方法调用,无遗漏。能获取 ​方法参数、返回值​(适合调试复杂逻辑)。支持 ​行级分析​(Line-level Profiling),精确到代码行。缺点​就是:性能开销大(可能使应用变慢 10%-20%)。不适合高并发或生产环境。

配置方式​:在 JProfiler 中选择 ​Instrumentation​ 模式,并过滤需要插桩的包(减少开销)。

​全采样(Sampling)​
JVM 每隔固定时间(如 10ms)中断所有线程,记录当前线程的堆栈信息,通过统计方法在采样中出现的频率推断其耗时。特点​是低开销​(通常 <1% CPU 占用)。适合长期监控生产环境。缺点​是可能遗漏短暂方法​(如执行时间 < 采样间隔的方法)。无法获取方法参数、返回值。配置方式​就是选择 ​Sampling​ 模式,调整采样间隔(默认 10ms)就是上面的图点编辑进去有个采样。
 异步采样(Async Sampling)​

就是混合模式,对关键方法(如自定义业务方法)使用插桩,对 JVM/第三方库方法使用采样。平衡精度和性能,​比纯采样更精准,比纯插桩开销更低缺点​就是配置复杂,需明确哪些方法需要插桩。

 这个就是正在监测的页面,可以看到数据是动态的,这个可以根据不同的二级目录查看需要的视图,类似于数据大屏的效果,想看详细的信息就要看其他的一级菜单了。

 这个是内存的信息,自动更新的时间是两秒,点击也可以马上更新,然后点击标记当前可以看到各个类的增加和减少的信息,这个用处就是蛮大了,比如可以根据类的增加来判断是否内存泄漏了。然后再结合二级菜单中的记录的对象可以更加直观的看到内存泄漏。

 还是一样我们点击标记当前,然后选择活动对象或者垃圾回收对象,这个1/10分配的意思就是创建或者回收10个类才会被记录一次,也可以选择全记录但是性能开销就太大了,然后我们可以先观察活动对象的情况,一段时间后点击运行GC或者直接选择垃圾回收对象,查看哪些对象被回收了,再对比活动对象,如果一个类创建率高但是回收率低那么可能就是内存泄漏了。

然后剩下的三个分别是分配调用树、分配热点、类追踪器,分配调用树:是 JProfiler 中用于分析 ​对象分配路径​ 的核心功能,它通过追踪对象的创建位置(即哪些方法调用了 new 关键字或工厂方法创建了对象),帮助开发者定位 ​内存分配热点​ 和潜在的内存问题(如内存泄漏、过度分配等)。分配热点:核心功能​就是​直接列出最耗内存的分配点​:平铺展示分配次数最多或内存占用最高的方法(无需查看完整调用链)。快速定位到具体的方法或类。解决的问题​是高频小对象分配​:如循环内重复创建 StringInteger 等。大对象集中分配​:如批量加载数据时一次性分配大数组。类追踪器:这个就不要多说了吧,就是追踪我们指定的类或者包的对象创建数量。

好了这三个小功能放在下篇详细说明,今天主包有点忙来不及了。

总结

本篇介绍了市面上常见的GUI图形化JVM监控工具,推荐的是JProfiler,简单的说明了一下JProfiler的几个常用功能,附上mac的JProfiler14安装包和破解码。

http://www.xdnf.cn/news/1239985.html

相关文章:

  • Python实现Word转PDF全攻略:从入门到实战
  • Linux U盘识别问题排查指南
  • Spring Boot + ShardingSphere 分库分表实战
  • 机器学习——决策树(DecisionTree)+ 过采样 + 交叉验证 案例:电信客户流失数据
  • 飞算科技:用自主创新技术,为行业数字化转型按下 “加速键”
  • ICCV2025 Tracking相关paper汇总和解读(19篇)
  • 13015计算机系统原理-速记宝典
  • Web 开发 12
  • 移动前后端全栈项目
  • 小迪安全v2023学习笔记(五十一讲)—— 持续更新中
  • Nexus配置npm私有仓库
  • Java项目:基于SSM框架实现的商铺租赁管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告+任务书+远程部署】
  • LLM大模型开发-SpringAI:ChatClient、Ollama、Advisor
  • io_destroy系统调用及示例
  • 基于 LangChain + 通义千问 + bge-large 中文 Embedding 搭建一个RAG问答示例
  • FastAPI入门:安全性
  • 第12届蓝桥杯Scratch图形化【省赛】初级组 2021年4月24日
  • MySQL学习之MVCC多版本并发控制
  • python常用数据类型
  • 13.Redis 的级联复制
  • 03.一键编译安装Redis脚本
  • sqli-labs:Less-23关卡详细解析
  • 【运维基础】Linux 硬盘分区管理
  • 数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter
  • Corrosion2靶机练习笔记
  • 选择排序原理与C语言实现详解
  • 第15届蓝桥杯Scratch图形化国赛初/中级组2024年9月7日真题
  • 【LeetCode刷题指南】--对称二叉树,另一颗树的子树
  • 【量化交易】日内交易有效特征因子
  • Socket编程——TCP协议