`
wangleide414
  • 浏览: 606454 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

生成报表内存溢出问题

 
阅读更多
 
      最近常在系统中发现内存不够用的情况,这里简单总结下对应场景和处理思路

背景:线上很多客户生成报表失败,由于采用是celery和异步方案,事后只能去查查日志,没发现异常情况,为了复现场景只能后台手动执行下脚本来生成,过程中用top,htop或者free来观察状态,发现在转pdf过程中内存一直增加,最         后不够用导致失败。生pdf存在该问题,rtf不存在。

分析:pdf的生成使用了第三方工具包,过程中使用shell命令调用执行,他的内部逻辑无法去控制和改变,所以只能从os层面和业务上想办法。

方案1:加物理内存,只能临时应付。而且比较麻烦,不能长久解决问题。交付物不变。

方案2:加swap,只能临时解决,不过比较简单方便,对于处理第一象限中紧急重要的事情可以这样做。交付物不变。
         具体方法如下:
 一、
dd if=/dev/zero of=/root/swap bs=1024 count=1024000
    count表示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更加合理,其他就是临时紧急的修改方案。目前已经使用方案四进行改进了。
 
  • 大小: 4.8 KB
  • 大小: 5.7 KB
分享到:
评论
1 楼 一样的鱼 2018-02-22  
00270c42d2ced1aa1425613f5b569d79新人报道!

相关推荐

    数据库更新工具+tomcat内存溢出解决办法+birt

    内存溢出问题(Out of Memory Error,OOME)在高负载或长时间运行的环境中常见,通常是由于内存分配不当或者垃圾回收机制失效导致的。解决Tomcat内存溢出的常见策略包括: 1. 调整JVM参数:增加堆大小(-Xms和-Xmx...

    EasyExcel(生成Excel报表)基本操作.pdf

    但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。...

    快速、简洁、解决大文件内存溢出的java处理Excel工具

    1. **低内存占用**:EasyExcel通过流式读写的方式,避免一次性加载整个文件到内存,从而有效地防止了内存溢出问题。即使处理几GB大小的Excel文件,也能游刃有余。 2. **高性能**:EasyExcel采用了高效的解析策略,...

    Chat2DB 智能数据库客户端,数据报表工具,自然语言生成SQL,生成报表

    但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。...

    java导出30万数据量的excel(采用生成多个excel,最后打包zip)

    2. **大数据量处理策略**: 一次性处理30万条数据可能导致内存溢出,因此采用分块处理。将数据分为多个小块,每块生成一个Excel文件,这样可以降低内存消耗并提高处理效率。通常,块的大小根据实际内存和系统性能进行...

    ureportfiles_包含sql语言和ureport配置_ureport报表文件_

    1. 报表参数:UReport支持动态参数,用户可以在设计时设置参数,通过参数传递值到SQL语句中,实现报表的动态生成,如`myReportAnalysis.ureport.xml`可能需要用户输入特定日期范围进行分析。 2. 报表样式:XML文件中...

    java读取excel之xlsl超大文件

    然而,当处理的Excel文件特别是XLSL格式的文件数据量巨大时,传统的API,如Apache POI或者JExcelAPI,可能会遇到性能问题,因为它们会一次性加载整个工作簿到内存中,可能导致内存溢出。为了解决这个问题,我们需要...

    java代码生成pdf报表

    7. **处理大数据量**:如果数据量大,可使用`PdfCopy`和`PdfStamper`类分页添加表格,避免内存溢出。 8. **处理图片和图形**:除了文本和表格,还可以在PDF中插入图片或绘制图形,如条形码、图表等。iText提供了`...

    java利用poi生成excel报表、处理word文档

    同时,处理大量数据时,分批写入或读取可以避免一次性加载所有数据导致的内存溢出问题。 总结,Java POI库为开发者提供了一种高效、灵活的方式来处理Excel报表和Word文档,无论是在生成报表还是数据导入导出、文档...

    SpringBoot整合EasyExcel进行报表导入导出实例Demo

    SpringBoot作为一款轻量级的Java开发框架,简化了项目的配置与搭建,而EasyExcel则是阿里巴巴推出的一个处理Excel的开源库,特别适合大数据量的读写操作,避免了内存溢出的问题。本实例将详细介绍如何在SpringBoot...

    Java水晶报表 JFreeChart使用

    6. **性能优化**:在大数据量或高并发场景下,如何优化报表和图表的生成速度,避免内存溢出等问题。 7. **错误处理和调试**:在报表开发过程中,可能会遇到数据不匹配、格式错误等问题,学会如何调试和处理这些异常...

    CSV大数据分批并压缩导出

    在处理大数据时,直接使用像Apache POI或JXL这样的库来一次性导出所有数据到Excel文件可能会遇到内存溢出问题。这是因为这些库在内存中构建整个工作簿模型,当数据量过大时,所需内存会迅速增加,可能导致Java虚拟机...

    jxls报表生成利器,比起jxl,poi牛逼得很

    5. **流式处理**: 对于大数据量的报表,Apache POI提供了流式处理模式,可以减少内存消耗,避免内存溢出问题。 6. **性能比较**: 相比jxl,Apache POI提供了更广泛的支持和更好的性能,尤其是在处理复杂Excel格式和...

    \jasperreports 对大数据量报表的支持.txt

    然而,当遇到大数据量报表的需求时,如何有效处理数据,避免内存溢出等问题,成为了开发者必须面对的挑战。本文将深入探讨JasperReports如何通过“报告虚拟化”技术,优化内存消耗,支持大数据量报表的生成。 ### ...

    java 制作excel报表的工具

    POI提供了低级的API(如HSSF和XSSF)来直接操作Excel文件的内部结构,以及更高级的SXSSF API,用于处理大型数据集,避免内存溢出问题。 在jxls中,我们可以创建一个Excel模板文件,用特殊的指令和变量来表示动态...

    MAT-Memory Analyzer Tool Java内存泄漏分析工具1.5

    MAT 是一个开源的java内存分析工具,能够快速的分析dump文件,可以直观的看到各个对象在内存占用的量大小,以及类实例的数量,对象之间的引用关系,找出对象的GC Roots相关的信息,此外还能生成内存泄露报表,疑似...

    JFreeChart水晶报表制作

    同时,要注意性能优化,尤其是在处理大量数据时,避免内存溢出和性能瓶颈。 总之,JFreeChart和水晶报表的结合使用,可以帮助开发人员创建具有专业级图表的高质量报告,提升数据分析和决策支持的能力。通过深入学习...

    java连接数据库包、数据报表包

    在生成报表时,避免一次性加载大量数据可能导致内存溢出,可以考虑分页或流式处理数据。 6. **错误处理和异常**: 在进行数据库操作和报表生成时,应妥善处理可能出现的异常,如`SQLException`和`IOException`。...

Global site tag (gtag.js) - Google Analytics