当前位置: 首页 > news >正文

CPU350% JVM GC频繁并GC不掉EXCEL导出

背景:

        有个Excel导出的需求,测试的时候,只要连续导出大量的数据就会导致FAT机器反请求反应迟钝,甚至卡死,无法恢复。

排查:

        1 跳板机跳到机器上,查看 项目 ipd  执行ps -ef | grep  项目名称.jar  查看后PID  执行 top -p PID ,查看cpu内存占用,CPU 占用百分之350%左右。

        2 查看内存使用较高,查看gc日志log,tail -f gc.log  发现 一直频繁YGC

        3 下载 JProFiler Java JVM分析利器JProfiler 结合IDEA使用详细教程_jprofiler使用教程-CSDN博客

        4 本地启动项目并测试排查,发现占用JVM不能释放的如图 char 和 string 是因为 ZprojeectBo 实体里的数据

        5 排查代码发现 实体ZProjeectBO 是Excel导出的主要实体,也就是所有excel导出的数据都在里面,并且是做了分页的,按道理不应该占用那摩多内存,但深入排查代码发现

//伪代码
List<ZProjeectBO> zp = new List<>;for(每一页){zp = 查每一页()//写入 excel
}
//这里页数多了 或者 zp数据太多  就会导致GC不掉
//因为 循环中 zp 虽然每次 重新赋值 但是在for循环里面不会被回收

解决方案:再循环中 极爱如 zp = null   和 System.gc();

        6 然后 再次测试 已经有很大改善 

但 AttrXobj 和ElemenXob 占用多 并且 老年代直接爆满

经过 百度 https://zhuanlan.zhihu.com/p/367119379 查到原因是因为excel当前使用的导出 ,如果导出数据过多有OOM的问题

解决方案:改成 SXSSFWorkbook 代替 或者其他 能对大量excel导出 数据写入文件而不是内存的,就能解决 内存释放不掉问题。

改完

----------------------------chenchen-----------------------------

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微软蓝屏事件:网络安全的多维挑战与应对策略
  • 前后端项目打包对比——关于Spring Boot Maven Plugin配置的问题
  • mysql数据迁移,全量和增量
  • AWS免费层之后:了解和管理您的云服务成本
  • 【Python面试题收录】Python编程基础练习题②(数据类型+文件操作+时间操作)
  • ZYNQ 入门笔记(零):概述
  • anaconda+tensorflow+keras+jupyter notebook搭建过程(CPU版)
  • 探索PyPDF2:Python中的PDF处理大师
  • windows服务器启动apache失败,提示请通过cmd命令行启动:net start apache
  • 大型语言模型的生物医学知识图优化提示生成
  • DB-gpt + one-api + kimi-free-api 真香
  • C++模版
  • 关于SpringBoot项目利用阿里EasyExcel快捷导入Excel文件入库初始化数据的简单实现
  • djiango-开始创建一个应用
  • JavaScript基础入门:构建动态Web世界的基石
  • $translatePartialLoader加载失败及解决方式
  • [LeetCode] Wiggle Sort
  • [译]Python中的类属性与实例属性的区别
  • 230. Kth Smallest Element in a BST
  • EventListener原理
  • Git同步原始仓库到Fork仓库中
  • Java|序列化异常StreamCorruptedException的解决方法
  • NSTimer学习笔记
  • Vue官网教程学习过程中值得记录的一些事情
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何实现 font-size 的响应式
  • 如何在 Tornado 中实现 Middleware
  • 深入浅出Node.js
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • #FPGA(基础知识)
  • #Java第九次作业--输入输出流和文件操作
  • #QT 笔记一
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (1)虚拟机的安装与使用,linux系统安装
  • (145)光线追踪距离场柔和阴影
  • (19)夹钳(用于送货)
  • (2)Java 简介
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (南京观海微电子)——示波器使用介绍
  • (四)linux文件内容查看
  • (算法)前K大的和
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)大道至简,职场上做人做事做管理
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .gitignore文件---让git自动忽略指定文件
  • .Net Core和.Net Standard直观理解
  • .NET Micro Framework初体验(二)
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .NET下ASPX编程的几个小问题