• 催收案件发布Excel文件上传并解析接口并发100出现内存溢出案例


    POST /debtorder/debt/uploadExcel

    30个并发压测就会出现5302服务宕机

     

    问题主要是出现在excel文件解析上,即使excel文件中只有一条记录,也会出现OOM

    由于采用的是POI解析文件,EXCEL解析的时候内存占用太大,容易导致内存溢出,所以优化后,采用阿里的easyexcel

    POI百万级大数据量EXCEL导出 采用了分批查询数据来避免内存溢出和使用SXSSFWorkbook方式缓存数据到文件上以解决下载大文件EXCEL卡死页面的问题。

    不过一是存在封装不太友好使用不方便的问题,二是这些poi的操作方式仍然存在内存占用过大的问题,三是存在空循环和整除的时候数据有缺陷的问题,以及存在内存溢出的隐患。

    阿里开源的EasyExcel框架,可以将解析的EXCEL的内存占用控制在KB级别,并且绝对不会内存溢出(内部实现待研究),还有就是速度极快, 大概100W条记录,十几个字段, 只需要70秒即可完成下载

    Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,

    但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到KB级别,

    并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便

    优化后:

    但是还是无法支撑高并发,目前30个并发就不会报错,但是40并发就会出错

    但是老年代还是频繁的回收GC,同时接口的耗时也比较严重,上述测试的案例,是一个excel中有50条记录

    问题解决以后:

    50条记录的excel在50并发下上传,响应时间基本控制在1s以内

    主要优化点:

    这个sql优化

    ALTER  TABLE  `t_organization_auth`  ADD  INDEX idx_orgId ( `orgId` )

    优化2:将poi解析框架替换成easyexcel矿建

    优化3:复杂4表联合优化成单标查询

    优化4:增加jvm内存到从2g到3g和6g

    50并发条件

    作者:Agoly
    出处:https://www.cnblogs.com/qmfsun/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    mysqllimit优化
    PLSQL Developer设置及快捷键设置
    Oracle建库、建表空间,建用户
    oracle分页语句
    oracle110个常用函数
    用二进制进行权限管理
    Tomcat6优化
    Silverlight 动态创建Xaml
    使用asp.net 2.0中的SqlBulkCopy类批量复制数据
    Jquery 插件开发
  • 原文地址:https://www.cnblogs.com/qmfsun/p/11352539.html
Copyright © 2020-2023  润新知