`

excel导出大数据量时服务器cpu过高解决方式

阅读更多

       最近服务器时不时的会卡死,后来通过日志分析,发现在卡死的时候有进行excel导出的操作,于是kill掉进程重启后自己手动尝试了下,发现导出的数据量超过三万条时cpu的使用率竟然高达600%(服务器8核8G,tomcat原始配置的环境),然后这种状况持续个一分钟左右后tomcat就会卡死。

       问题已经明确了就是导出的问题,后来就上网查各种解决方式,有说大数据量换成csv的,但是为了方便财务的使用,还是坚持了导出excel,根据我们现在的业务量,一周也就将近3万条订单数据,导出excel正常来说应该是完全没有问题的,于是接着找解决方式。

       首先查找cpu过高的原因,通过使用jvisualvm监控工具查看cpu的实时动态,发现在堆内存骤然上升后,发生jvm垃圾回收的时候cpu会陡然上升,稍后会稍微下降,一会儿又会进行垃圾回收,导致cpu再次飙高。通过分析,基本上问题锁定在堆内存高使用量且频繁GC的原因导致的,于是开始对导出代码进行优化,导出excel引入的是poi-3.10的jar包,因为涉及到for循环操作,之前头脑中有个印象就是变量的声明最后是放到循环外,但又不是很确定,就上网查了下,结合http://www.iteye.com/problems/16385和http://blog.csdn.net/virtualman2000/article/details/1138496两篇博文,我个人还是比较认可在循环外进行变量的声明的,因为在循环内声明变量,如果数据量大的话会不断的在stack中分配新的内存,还是会有一定的影响的,所以第一步优化就是把循环内的变量提出到循环体外进行声明;

       第一步的优化相对来说影响是不那么大的,接下来才是重点,对jvm进行优化,通过设置jvm参数:

      JAVA_OPTS="-Xms4096m -Xmx4096m -XX:PermSize=256M -XX:MaxNewSize=1024m"

第二步优化完之后重启tomcat再次进行测试,发现cpu最高也就到200%多,平时的cpu都15%以内,

第二步属于最关键的,接着又对前端导出按钮和导出条数做了相应的限制,对于我们的业务目前限制是只能导出一周以内的数据,按钮点击后置灰不可重复点击,以及导出的最大条数限制到了45000。

       目前的优化就先做了这部分,后期随着业务的变化可能还会进行调整,调整后再和大家分享。

 

分享到:
评论

相关推荐

    plsql大数据量导出工具

    在Oracle数据库环境中,处理大数据量的表数据导出是一项挑战,特别是当数据达到百万或千万级别时。"plsql大数据量导出工具"是专为解决这类问题而设计的工具,它能有效地从Oracle数据库中导出大规模数据,并将其保存...

    Excel百万级别数据的导入和导出

    2. **数据分块处理**:当数据量过大时,可以采用分块读取和写入的方法。例如,将大文件分割成小块,逐块导入Excel,以降低内存占用并提高处理速度。 3. **使用编程语言**:Java库如Apache POI或EasyExcel(对应...

    andriod 导出 excel

    总之,Android平台上的Excel导出涉及多个技术层面,从选择合适的库到优化性能,都需要开发者具备扎实的编程基础和良好的问题解决能力。通过以上知识点的学习和实践,你将能够有效地实现在Android应用中创建和导出...

    excel的导入导出

    例如,要导出百万条数据,可以创建一个大的DataTable,然后通过EPPlus将其一次性写入Excel: ```csharp using OfficeOpenXml; // 假设dt是包含百万条数据的DataTable FileInfo fileInfo = new FileInfo("output....

    Aspose.Cells导出excel

    Aspose.Cells是一款强大的编程库,专门用于处理Microsoft Excel文件,无需在服务器上安装Office套件。这个库提供了广泛的API和功能,使得开发人员能够轻松地创建、编辑、格式化和导出Excel工作簿。以下是对Aspose....

    勤哲Excel服务器精解.doc

    模版是勤哲Excel服务器中用于快速创建文档的基础框架,它定义了文档的基本结构、样式和数据录入规则,通过使用模版可以大大简化日常办公过程中文档创建的工作量。 ##### 2.3 新建模版 新建模版的具体步骤如下: 1...

    GridToExcel.rar

    7. **优化性能**:如果数据量很大,一次性生成整个HTML表格可能会消耗大量内存和CPU资源。因此,可以考虑分批生成和导出,或者提供一个预览功能,让用户选择要导出的数据范围。 在"GridToExcel.js"中,我们可以看到...

    C# 监测服务器使用情况(CPU、内存、硬盘、网络宽带1、进程).zip

    可以使用`Microsoft.Office.Interop.Excel`库来读取和操作Excel文件,或者使用开源库如EPPlus,以更轻量级的方式处理Excel数据。 7. **GetSystemStatusDemo**: - 这很可能是项目的主要代码文件,展示了如何实现...

    如何直接将数据导入到EXCEL文件.rar

    C++Builder作为一个强大的集成开发环境(IDE),提供了多种方式来处理与数据库的交互,并且可以方便地将数据导出到Excel文件中。以下就是关于如何使用C++Builder进行数据库操作并将数据导入Excel的详细知识点。 1. ...

    C#导出数据到excel如何提升性能

    通过以上策略的综合运用,可以显著提升C#导出数据到Excel的性能,确保程序的稳定性和用户体验。同时,开发者还应该根据具体的应用场景和数据特性,不断调整和优化这些方法,以达到最佳的性能效果。

    phpexcel 生成excel

    这个库使得在服务器端用PHP处理Excel数据变得简单,适用于数据导出、报表生成等场景。以下是对`phpExcel`相关知识点的详细说明: 1. **基本概念** - `phpExcel`库:它是一个基于PHP的开源项目,允许开发者创建、...

    SQLTools综合利用工具

    对于大数据量的处理,它还支持数据导入导出,可方便地将数据从一个数据库迁移到另一个数据库,或者与CSV、Excel等格式的数据交换。 SQLTools还包括了强大的数据库备份和恢复功能。用户可以设定定期备份计划,确保...

    BQServer报表服务器

    其后台可能采用高性能的数据库管理系统作为数据存储,如MySQL或Oracle,以确保大数据量时的稳定性和响应速度。 ### **4. 故障排查与优化** - **日志监控**:查看系统日志,定位错误原因。 - **性能调优**:优化SQL...

    PHPExcel-1.8(666).zip

    使用PHPExcel时,需要注意的是,由于它需要处理大量的数据和格式,可能会消耗较多的内存和CPU资源。因此,在处理大量数据时,需要合理优化代码,避免内存溢出或性能瓶颈。 在实际应用中,PHPExcel通常与其他PHP框架...

    mysql Manager

    用户还可以导入和导出数据,支持多种文件格式如CSV、XML、Excel等。 4. **查询执行**:提供SQL编辑器,支持编写和执行复杂的SQL查询,进行数据筛选、更新、插入和删除。还具备查询结果查看和操作功能,如排序、过滤...

    BSQL数据管理

    BSQL提供了数据导入导出功能,支持从CSV、Excel等格式的文件导入数据到数据库,也可以将数据库中的数据导出为这些格式的文件。这对于数据迁移、数据备份或者数据分析等工作来说非常实用。 ### 五、数据库维护 除了...

    开源项目-agrison-go-tablib.zip

    由于Go语言天生的并发优势, agrison-go-tablib在处理大规模数据时可以充分利用多核CPU,提高数据处理速度。 6. **社区支持与扩展**: 作为一个开源项目,agrison-go-tablib有活跃的开发者社区,用户可以贡献代码...

    java内存分析指引07_v0.2.doc

    对于大数据量处理,可以采用分页策略减少一次性加载的数据量。对于代码层面,避免死循环和递归,确保对象在不再使用时被正确释放。最后,优化JVM内存配置以适应应用程序的需求,防止因内存限制导致的溢出问题。

    CrystalReports64

    64位系统能处理更大的内存和数据量,对于需要处理大量数据或者运行复杂计算的报表系统来说,具有显著的优势。它能够更高效地处理大数据集,提高报表生成速度,并支持更高的内存配置,使得处理复杂的报表和分析变得...

    迷你SQL数据库查看器

    6. **性能监控**:虽然小型,但这款工具可能具备一定的性能监控功能,如查看数据库性能指标(如CPU使用率、内存使用、磁盘I/O等),帮助识别和解决性能瓶颈。 7. **权限管理**:数据库的权限控制是确保数据安全的...

Global site tag (gtag.js) - Google Analytics