java导出excel数据量大_解决大批量Excel导出OOM问题

博客讲述了在处理大量数据导出时遇到的Java OOM问题,以及解决方案。通过异步操作、分页优化、线程池设置、内存管理和垃圾回收策略调整,解决了导出Excel导致的性能瓶颈和内存溢出问题。然而,尽管进行了优化,仍出现了新的OOM问题,分析原因是Eden space不足。最后提出了进一步的优化建议,如减少引用类型使用、增加堆内存和选择合适的垃圾回收器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、背景介绍:最近一直被OOM问题缠绕,原因是表单下载功能访问量比较大,数据量相当多,表单数据存储在mongodb,数据总量2亿多,每个实例总内存限制1.5G左右,线上部署了5个实例,但是最大承受时间也不过3天,于是决定逐步优化解决此问题

2、环境介绍:

2.1、vm: openjdk:8-jre-alpine

2.2、docker 部署,k8s管理

3、问题呈现:

3.1、导出大批量Excel时,nginx 504

3.2、访问量高 && 导出大批量Excel,出现OOM

4、问题分析:

4.1、nginx 504 问题,服务器长时间无响应,根本原因是同步操作,mongodb查询慢

4.2、数据保存在mongodb,mongodb分页是深分页,会全表扫描

5、解决办法:

5.1、导出采用异步操作,多线程异步处理

5.2、大批量的Excel采用下载到磁盘,统一压缩为zip文件上传到腾讯云,

5.3、能尽量用基本类型的不使用引用类型异步操作如图示

f9efbd277aff7db9c2652d0d6dbb7482.png

具体代码如下:

设置线程池,核心线程数不是越大越好,具体文章请参考

https://blog.csdn.net/wang123459/article/details/82079250

线程池资料参考

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值