真是悲剧啊,一个破内部使用系统20多个人使用的后台管理系统有个excel文件上传功能,使用poi3.6版本来解析excel,出现的case是20多个人同时在上传,平均每个人上传的excel有1000多行,大小也就是不到100k吧,由于每个excel后端处理服务时间较长,导致同时需要处理100k*20的excel的行数,本来也就几M的数据量,可是poi解析居然要用掉的内存是这个量的几百倍,不可思议,
使用代码如下:
XSSFWorkbook wb = new XSSFWorkbook(inputStream); XSSFSheet sheet = wb.getSheetAt(0); Iterator<Row> iter = sheet.iterator(); boolean isfirstline = true; while (iter.hasNext()) { Row row = iter.next(); if (isfirstline) { // 忽略上传文件第一行的标题栏 isfirstline = false; continue; } //解析excel,每行有11列,然后对每列解析出来之后调用后端服务把数据保存到数据库中, } }
内存当时监控,重启一次马上又挂了,
在本地测试了下:
用4.5M多的14多w条记录的excel上传后,然后调试dump jvm heap信息,可怕的poi解析过程使用的两个类的内存占用量惊人的大
网上查了下,大概有几种解决方法:
1. 这个不知道哪个版本才有,3.6是没有的
官方DEMO中有个
Workbook wb = new SXSSFWorkbook(1000);
// keep 1000 rows in memory,
// exceeding rows will be
// flushed to disk
内存里一次只留 多少行
2.尽量使用csv或者txt格式的文件;
3.如果确实必须使用excel,以前有人在传统软件里面是用.net的com组件去调用office的API,这种性能应该是最优的,然后在.net里面提供服务异步解析excel文件;
4.最好能把用户上传的excel先保存起来,然后用一个异步线程一个一个处理excel,这样就不会同时处理好几个excel的量导致内存暴涨,然后excel最好分批上传;
相关推荐
然而,当处理大数据量的Excel文件时,POI可能会导致内存溢出(Out of Memory, OOM),因为默认情况下它会将整个工作簿加载到内存中。为了防止这种问题,我们需要采用优化策略来高效地处理大量数据。 1. **分块读取*...
在处理大量数据时,使用 POI 的默认用户模式(UserModel)读取 Excel 文件可能会导致内存溢出问题,因为该模式会将整个文件加载到内存中。本文将详细介绍如何解决由 POI 用户模式引发的内存溢出问题,并提供相应的...
绝对原创,这是我在项目中解决大数据Excel导入时内存溢出问题而编写的Excel行级解析器。同时支持Excel-2003和Excel-2007,excel-2003解析采用poi的eventusermodel模式实现,2007采用xmlreader实现,经项目验证,...
【标题】"poi解析excel"涉及的是Java编程中使用Apache POI库来处理Microsoft Excel文件的知识。Apache POI是开源项目,提供了API用于读写Microsoft Office格式的文件,特别是Excel。在Java应用中,POI使得开发者能够...
以上就是使用Apache POI解析Excel文件并将数据存入Oracle数据库的基本步骤。在实际应用中,你可能需要根据具体需求进行调整,例如处理不同类型的单元格(数字、日期等)、异常处理、优化性能等。
本篇文章将详细讲解如何使用Apache POI解析Excel文件,并将数据写入数据库。 首先,我们需要了解Apache POI的基本概念。POI提供了一个Java API,使得开发者可以在不依赖Microsoft Office的情况下,处理Excel文件。...
这个“POI解析excel并存入mysqlのdemo”是利用 Java 的 Apache POI 库来读取 Excel 数据,并将这些数据存储到 MySQL 数据库中的示例。下面我们将详细探讨相关的知识点。 1. **Apache POI**: Apache POI 是一个...
使用Apache POI解析Excel数据的基本步骤如下: 1. **添加依赖**:将对应的poi.jar包引入项目类路径。如果是Maven项目,可以在pom.xml文件中添加依赖项,如下: ```xml <groupId>org.apache.poi <artifactId>...
《使用POI解析Excel》 在信息技术领域,处理数据是日常工作中不可或缺的一部分,而Excel作为广泛使用的电子表格软件,其数据处理能力强大且灵活。Apache POI是一个开源库,专门用于读取和写入Microsoft Office格式...
"android poi解析Excel 的三个jar包" 提供了实现这一目标所需的Java库。这些库使得Android应用可以与Excel文件进行交互,而无需依赖Microsoft Office或任何桌面环境。让我们详细探讨这三个关键的jar包以及它们在...
标题中的“POI解析Excel,最高支持2010版本的Excel导入数据库”是指使用Apache POI库来处理Microsoft Excel文件,并将数据导入到数据库中。Apache POI是一个开源项目,它提供了Java API来读取、写入和修改Microsoft ...
2. **解析Excel文件** - **创建工作簿对象**: 使用`WorkbookFactory.create()`方法,传入一个InputStream,可以打开并加载Excel文件。 - **获取工作表**: 通过调用`Workbook`对象的`getSheet()`或`getSheetAt()`...
标题提到的"poi解析excel相关jar",指的是Apache POI 提供的Java库,用于解析和创建Excel文件。 描述中提到了两个版本的jar文件:"poi-excelant-3.9-20121203" 和 "poi-3.9-20121203"。这两个jar是Apache POI 3.9...
**POI解析Excel的主要知识点** 1. **工作簿(Workbook)**: 在POI中,Excel文件被抽象为一个Workbook对象。你可以创建、读取或修改Workbook。 2. **工作表(Sheet)**: Workbook包含一个或多个Sheet,每个Sheet对应...
本教程将详述如何使用Apache POI库读取Excel数据,并通过Java的JDBC接口批量插入到MySQL数据库中。Apache POI是Java平台上的一个开源项目,它允许程序员创建、修改和显示Microsoft Office格式的文件,其中包括Excel...
在Java中,如果你需要生成或解析Excel文件,POI库是一个非常强大的工具。本篇文章将深入探讨如何使用POI库在Java中创建和读取Excel文档。 首先,我们需要在项目中引入POI相关的JAR文件。在"lib"目录下,你应该能...
《Excel解析工具POI.jar详解》 在信息技术领域,数据处理是不可或缺的一部分,尤其是在大数据时代,Excel作为广泛使用的表格处理软件,其数据处理能力受到广大用户的青睐。然而,当面对大量Excel数据时,传统的手动...
事件驱动解析是把文件转换成xml,然后一边读取一边解析,这样就对内存的占用就会很少,可以很好的处理poi出现OOM的问题。 maven添加需要的jar包 <groupId>org.apache.poi <artifactId>poi <version>3.15 ...
4. **POI 解析Excel** - **读取Excel**:使用`WorkbookFactory.create()`打开已存在的Excel文件,然后通过工作表的迭代器遍历所有行和列,读取单元格的值。 - **导出Excel**:创建新的工作簿,根据数据动态创建行...