数据量比较大的情况下直接导出可能会出现内存溢出

简介: 数据量比较大的情况下直接导出可能会出现内存溢出

故障原因
下午14:30左右服务器load明显飙升出现登录缓慢的情况



处理过程
根据告警信息提示,是应用服务器的load指标过高引起,查询ECS服务器的指标发现cpu在14:30左右出现明显飙升


load指标也有明显飙升



排查思路:
联系志成导出出现异常时间点附近的服务器日志,打开导出的jstack文件,发现cpu时间较高的线程


打开导出的dump文件,发现存在线程占用内存过高的情况



继续查看线程的堆栈信息,和jstack中找到的一致,发现是导出文件引起的异常现象



静态文件导出由于模版文件不会很大,所以理论上不大可能会出现这种情况,很大可能是导出动态生成的文件引起,由于数据量过大,导致导出过程内存占用过高
目前导出采用的是POI框架,导出使用的WORKBOOK为XSSFWORKBOOK,计划改成SXSSFWORKBOOK,这种WORKBOOK有提供一个包含rowAccessWindowSize参数的构造函数,这个参数表示内存可见条数,超过部分会存到磁盘上,需要在uat或其他环境做一下验证

暴露的问题
目前有部分文件导出采用的是同步的方式导出,在数据量比较大的情况下直接导出可能会出现内存溢出的情况

改进措施
计划采用SXSSFWORKBOOK设置内存可见条数的方式作为处理方案,在uat环境进行验证

若有收获,就点个赞吧


相关文章
|
数据库
mongo占用内存过大解决方案
自己有一个测试用的服务器,配置很低。年前出现几次问题,重启后就好了也就没注意。后来越来越频繁就调查了一下,发现重启后内存就一直增长直到接近100%。使用ps aux查看cpu和内存使用情况,发现mongo占用了大部分的内存,这是什么情况?
708 0
|
8月前
|
缓存 Java easyexcel
如何高效的导出 百万级别的数据量 到 Excel?
如何高效的导出 百万级别的数据量 到 Excel?
146 0
|
1月前
|
分布式计算 大数据 Java
maxcompute函数问题之数据量较大经常OOM如何解决
MaxCompute函数包括内置函数和自定义函数(UDF),它们用于在MaxCompute平台上执行数据处理和分析任务;本合集将介绍MaxCompute函数的使用方法、函数编写和优化技巧,以及常见的函数错误和解决途径。
|
1月前
|
SQL Java 数据库连接
Flink内存问题之超出物理内存如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
1月前
|
存储 SQL Java
jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full GC
jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full GC
60 0
|
11月前
|
存储
HDFS 文件块的大小为什么不能设置太小、也不能设置太大?
HDFS 文件块的大小为什么不能设置太小、也不能设置太大?
188 0
|
11月前
|
消息中间件 关系型数据库 Shell
记录贴:sentry磁盘占用过大如何清理?
记录贴:sentry磁盘占用过大如何清理?
921 0
|
12月前
|
存储
【PE准备阶段】将内存中的数据读取到内存,将内存中的数据读取到文件中【滴水逆向39期作业】
【PE准备阶段】将内存中的数据读取到内存,将内存中的数据读取到文件中【滴水逆向39期作业】
|
SQL 算法 关系型数据库
100G内存下,MySQL查询200G大表会OOM么?
我的主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光? 逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光,逻辑备份不是早就挂了? 所以大表全表扫描,看起来应该没问题。这是为啥呢?
100G内存下,MySQL查询200G大表会OOM么?