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

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

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



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


load指标也有明显飙升



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


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



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



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

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

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

若有收获,就点个赞吧


相关文章
|
1月前
|
分布式计算 大数据 Java
maxcompute函数问题之数据量较大经常OOM如何解决
MaxCompute函数包括内置函数和自定义函数(UDF),它们用于在MaxCompute平台上执行数据处理和分析任务;本合集将介绍MaxCompute函数的使用方法、函数编写和优化技巧,以及常见的函数错误和解决途径。
|
1月前
|
存储 SQL Java
jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full GC
jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full GC
61 0
|
11月前
|
消息中间件 关系型数据库 Shell
记录贴:sentry磁盘占用过大如何清理?
记录贴:sentry磁盘占用过大如何清理?
940 0
|
SQL 算法 关系型数据库
100G内存下,MySQL查询200G大表会OOM么?
我的主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光? 逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光,逻辑备份不是早就挂了? 所以大表全表扫描,看起来应该没问题。这是为啥呢?
100G内存下,MySQL查询200G大表会OOM么?
|
SQL 存储 canal
当数据量达到百万级别的时候,分页该如何处理?
当数据量达到百万级别的时候,分页该如何处理?
367 0
|
SQL 测试技术 Go
SQL日志太大?教你一键清理
最近数据仓库时不时爆磁盘空间不足,导致定时任务执行失败,这可了得,要知道定时任务执行的可是每天的业务数据。 仔细检查,发现是日志文件爆满,这是咋回事呢? 原来数据仓库中,每天的定时任务需要从其他系统里面抽取数据过来,导致数据文件和日志文件的磁盘空间都增长的飞快。 数据不能清理,但是日志文件是可以清理的,说干就干。
SQL日志太大?教你一键清理
分页数/未分页 占用内存高日志收集排查方案
任务管理器看到内存占用高,内存占用主要是分页或未分页(windows 2012 之后显示是页面/非页面缓冲池)。
分页数/未分页 占用内存高日志收集排查方案