当前位置: 首页 > 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.lryc.cn/news/609667.html

相关文章:

  • SpringBoot格式化数据库表格字段时间戳
  • vcpkg在vs/vscode下用法
  • 子词分词器(Byte Pair Encoding + WordPiece)
  • 深入解析SmolVLA:VLM与动作专家间的注意力机制交互
  • 深入剖析通用目标跟踪:一项综述
  • [自动化Adapt] 父子事件| 冗余过滤 | SQLite | SQLAlchemy | 会话工厂 | Alembic
  • RLCraft开服踩坑记录
  • 补:《每日AI-人工智能-编程日报》--2025年7月30日
  • AWS 可靠性工程深度实践: 从 Well-Architected 到“零失误”VPC 落地
  • 使用AWS for PHP SDK实现Minio文件上传
  • 音视频学习笔记
  • vue3入门-概览讲解
  • 使用 IntelliJ IDEA + Spring JdbcTemplate 操作 MySQL 指南
  • 基于Java的AI/机器学习库(Smile、Weka、DeepLearning4J)的实用
  • Go语言流式输出技术实现-服务器推送事件(Server-Sent Events, SSE)
  • 【银河麒麟服务器系统】自定义ISO镜像更新内核版本
  • Linux 文件与目录属性管理总结
  • Android 区块链 + CleanArchitecture + MVI 架构实践
  • IDA9.1使用技巧(安装、中文字符串显示、IDA MCP服务器详细部署和MCP API函数修改开发经验)
  • Android工程命令行打包并自动生成签名Apk
  • 服务器突然之间特别卡,什么原因?
  • ffmpeg下载windows教程
  • clickhouse 中文数据的正则匹配
  • 随笔之 ClickHouse 列式分析数据库安装注意事项及基准测试
  • 人大金仓数据库常见问题(持续更新)
  • 数据结构----排序
  • Android 15.0 启动app时设置密码锁(升级到framework层判断)
  • 《时间之隙:内存溢出》
  • 《基于电阻抗断层成像(EIT)的触觉传感器:物理模拟与机器学习的创新结合》论文解读
  • RocketMQ与Kafka 消费者组的‌重平衡操作消息顺序性对比