记一次Profiler生产实战内存分析(二)

背景

线上又有服务CPU爆高了呀,原因和上次(记一次JProfiler生产实战内存分析 - 掘金 (juejin.cn))一样,都是JVM频繁垃圾回收导致,dump下内存文件看看。

分析过程

打开dump文件,如下 基本可以看出,是RealData这个类太多 我们也可以直接从byte\[\] 数组开始出发进行分析

右键byte\[\]数组->使用选定对象->合并的传入引用 依次点开百分比最高的部分 最终发现1个实例来自于RealValueContext这个类 打开代码,搜索该类 发现里面有一个realDataList的属性,猜测应该是这个list中数据多导致。

右键选中该类->使用引用持有者->传出引用 查看当前对象的相关属性 这个对象有1600多M,这个list里面有1200W大小,原因找到。

分析一下代码,看看为啥会有这么多。 这个属性的使用是用来通过批量的方式,提高保存redis的效率。每次执行完定时任务后,该内存就会回收调,看来应该是这个定时任务没有执行导致的。

这个定时任务会在项目启动的时候就会初始化执行,那为啥会没有执行呢?

定时任务报错导致后续任务中断。

写一个demo试试 模拟异常情况 任务中断了。

解决方案

try catch一下 修改代码,上线,问题解决!

相关推荐
用户8181870627461 分钟前
二、多线程并发篇
后端·程序员
Zane19942 分钟前
ThreadLocal 与 BlockingQueue:线程本地变量的内存泄漏原理,以及阻塞队列怎么选?
java·后端
用户3126874877202 分钟前
Spring Bean 生命周期到底经历了什么?从实例化到销毁的全链路拆解
java·spring boot
橘色的喵3 分钟前
一块 RISC-V MCU 是怎么启动的: 内存保护、中断与从 Flash 直接执行
后端
长栎7 分钟前
JDBC 用了 30 年的 Bridge 模式,多数人以为它只是策略模式换了层皮
后端
Flittly7 分钟前
【我的手搓轮子日记】(2)handmade-ioc 手搓 IOC 容器
java·spring boot·spring
阿昌喜欢吃黄桃8 分钟前
Dubbo服务重启时注册中心下线不及时问题排查与修复记录
java·rpc·dubbo·问题排查
Ai拆代码的曹操10 分钟前
排查 3 小时,问题竟在 Dubbo 路由规则:一个 force 的坑
后端
无责任此方_修行中17 分钟前
换个版本号就能升级?可没那简单:pnpm 11 升级踩坑记
javascript·后端·npm
SelectDB17 分钟前
洋钱罐基于 SelectDB 实现 Hive 数据湖透明加速:查询 P95 从 300 秒降至 20 秒的完整实践
后端