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

背景

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

分析过程

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

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

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

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

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

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

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

解决方案

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

相关推荐
rururunu4 分钟前
Windows 下切换 Java 环境太复杂了,我做了个 cli 工具,可以快速安装,切换 Java 版本
java
qq_452396236 分钟前
第十一篇:《性能压测基础:JMeter线程模型与压测策略设计》
java·开发语言·jmeter
传说之后8 分钟前
深入浅出 Raft:万字解析分布式共识的核心设计
后端
澈20715 分钟前
二叉搜索树:高效增删查的秘诀
java·开发语言·算法
小小小小宇16 分钟前
Go 后端高并发架构:从外到内的立体防御体系
后端
青云计划21 分钟前
Spring
java·后端·spring
yychen_java23 分钟前
深度解析电力交易系统的“硬核”战场
java·能源
无尽冬.1 小时前
个人八股之string字符串
java·开发语言·经验分享·后端·异世界
伯远医学1 小时前
Nat. Methods | 邻近标记技术:活细胞中捕捉分子互作的新利器
java·开发语言·前端·javascript·人工智能·算法·eclipse