排查线上内存泄露问题 oom

近期项目活动总是出现莫名其妙的中断,查看日志发现 竟然报出oom Java heap space 发现原来是oom终止了进程导致

由此推断出是内存溢出 或者是内存泄露  

第一步:就是找到运维要hprof文件 获取文件后 使用mat工具打开进行分析 下载https://www.eclipse.org/mat/downloads.php 注:版本需与java version一致

第二步:查看具体类 一层层的点进去 查看到具体的类 (本次表象为com.alibaba.druid.stat.JdbcDataSourceStat$1引起的,具体分析发现是subList导致的内存泄露,批量更新后不释放资源)

List<Integer> subList =list.subList(1, 4) (导致内存泄露)

修改方式

//方式一:

List<Integer> subList = new ArrayList<>(list.subList(1, 4));
//方式二:
List<Integer> subList = list.stream().skip(1).limit(3).collect(Collectors.toList());

修改后正常 熟能生巧

posted @ 2022-09-28 16:42  老小包的博客  阅读(118)  评论(0编辑  收藏  举报