最近常在系统中发现内存不够用的情况,这里简单总结下对应场景和处理思路
背景:线上很多客户生成报表失败,由于采用是celery和异步方案,事后只能去查查日志,没发现异常情况,为了复现场景只能后台手动执行下脚本来生成,过程中用top,htop或者free来观察状态,发现在转pdf过程中内存一直增加,最 后不够用导致失败。生pdf存在该问题,rtf不存在。
分析:pdf的生成使用了第三方工具包,过程中使用shell命令调用执行,他的内部逻辑无法去控制和改变,所以只能从os层面和业务上想办法。
方案1:加物理内存,只能临时应付。而且比较麻烦,不能长久解决问题。交付物不变。
背景:线上很多客户生成报表失败,由于采用是celery和异步方案,事后只能去查查日志,没发现异常情况,为了复现场景只能后台手动执行下脚本来生成,过程中用top,htop或者free来观察状态,发现在转pdf过程中内存一直增加,最 后不够用导致失败。生pdf存在该问题,rtf不存在。
分析:pdf的生成使用了第三方工具包,过程中使用shell命令调用执行,他的内部逻辑无法去控制和改变,所以只能从os层面和业务上想办法。
方案1:加物理内存,只能临时应付。而且比较麻烦,不能长久解决问题。交付物不变。
方案2:加swap,只能临时解决,不过比较简单方便,对于处理第一象限中紧急重要的事情可以这样做。交付物不变。
具体方法如下:
一、
dd if=/dev/zero of=/root/swap bs=1024 count=1024000count表示block的数量,一般一个block为1k,这样就创建了一个1G的文件。不过需要注意在/tmp目录下的文件,在系统重启后会清理,所以最后不要放在/tmp下。
二、
变为swsp分区
mkswap /root/swap三、
使其变为有效状态
swapon /root/swap四、
为了使其在重启后也有效。需要把信息写入/etc/fstab中。格式如下:
/root/swap swap swap defaults 0 0五、
增加前:
增加后:
明显看到free 增加了1G,这时候在去执行生成报表的程序就OK了。
方案3:修改代码,分成多份报表提供给客户。这样就不会引发内存不够的问题。但需要客户同意,交付物改变。
方案4:长久方案,拆分成更细粒度 ,交付物改变。
从合理角度来看。方案4更加合理,其他就是临时紧急的修改方案。目前已经使用方案四进行改进了。
相关推荐
内存溢出问题(Out of Memory Error,OOME)在高负载或长时间运行的环境中常见,通常是由于内存分配不当或者垃圾回收机制失效导致的。解决Tomcat内存溢出的常见策略包括: 1. 调整JVM参数:增加堆大小(-Xms和-Xmx...
但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。...
1. **低内存占用**:EasyExcel通过流式读写的方式,避免一次性加载整个文件到内存,从而有效地防止了内存溢出问题。即使处理几GB大小的Excel文件,也能游刃有余。 2. **高性能**:EasyExcel采用了高效的解析策略,...
但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。...
2. **大数据量处理策略**: 一次性处理30万条数据可能导致内存溢出,因此采用分块处理。将数据分为多个小块,每块生成一个Excel文件,这样可以降低内存消耗并提高处理效率。通常,块的大小根据实际内存和系统性能进行...
1. 报表参数:UReport支持动态参数,用户可以在设计时设置参数,通过参数传递值到SQL语句中,实现报表的动态生成,如`myReportAnalysis.ureport.xml`可能需要用户输入特定日期范围进行分析。 2. 报表样式:XML文件中...
然而,当处理的Excel文件特别是XLSL格式的文件数据量巨大时,传统的API,如Apache POI或者JExcelAPI,可能会遇到性能问题,因为它们会一次性加载整个工作簿到内存中,可能导致内存溢出。为了解决这个问题,我们需要...
7. **处理大数据量**:如果数据量大,可使用`PdfCopy`和`PdfStamper`类分页添加表格,避免内存溢出。 8. **处理图片和图形**:除了文本和表格,还可以在PDF中插入图片或绘制图形,如条形码、图表等。iText提供了`...
同时,处理大量数据时,分批写入或读取可以避免一次性加载所有数据导致的内存溢出问题。 总结,Java POI库为开发者提供了一种高效、灵活的方式来处理Excel报表和Word文档,无论是在生成报表还是数据导入导出、文档...
SpringBoot作为一款轻量级的Java开发框架,简化了项目的配置与搭建,而EasyExcel则是阿里巴巴推出的一个处理Excel的开源库,特别适合大数据量的读写操作,避免了内存溢出的问题。本实例将详细介绍如何在SpringBoot...
6. **性能优化**:在大数据量或高并发场景下,如何优化报表和图表的生成速度,避免内存溢出等问题。 7. **错误处理和调试**:在报表开发过程中,可能会遇到数据不匹配、格式错误等问题,学会如何调试和处理这些异常...
在处理大数据时,直接使用像Apache POI或JXL这样的库来一次性导出所有数据到Excel文件可能会遇到内存溢出问题。这是因为这些库在内存中构建整个工作簿模型,当数据量过大时,所需内存会迅速增加,可能导致Java虚拟机...
5. **流式处理**: 对于大数据量的报表,Apache POI提供了流式处理模式,可以减少内存消耗,避免内存溢出问题。 6. **性能比较**: 相比jxl,Apache POI提供了更广泛的支持和更好的性能,尤其是在处理复杂Excel格式和...
然而,当遇到大数据量报表的需求时,如何有效处理数据,避免内存溢出等问题,成为了开发者必须面对的挑战。本文将深入探讨JasperReports如何通过“报告虚拟化”技术,优化内存消耗,支持大数据量报表的生成。 ### ...
POI提供了低级的API(如HSSF和XSSF)来直接操作Excel文件的内部结构,以及更高级的SXSSF API,用于处理大型数据集,避免内存溢出问题。 在jxls中,我们可以创建一个Excel模板文件,用特殊的指令和变量来表示动态...
MAT 是一个开源的java内存分析工具,能够快速的分析dump文件,可以直观的看到各个对象在内存占用的量大小,以及类实例的数量,对象之间的引用关系,找出对象的GC Roots相关的信息,此外还能生成内存泄露报表,疑似...
同时,要注意性能优化,尤其是在处理大量数据时,避免内存溢出和性能瓶颈。 总之,JFreeChart和水晶报表的结合使用,可以帮助开发人员创建具有专业级图表的高质量报告,提升数据分析和决策支持的能力。通过深入学习...
在生成报表时,避免一次性加载大量数据可能导致内存溢出,可以考虑分页或流式处理数据。 6. **错误处理和异常**: 在进行数据库操作和报表生成时,应妥善处理可能出现的异常,如`SQLException`和`IOException`。...