jxl(2.6.10)导出Excel触发fullgc

文章描述了一种服务在导出表格时出现卡顿,通过分析gc.log发现频繁的FullGC。作者通过添加VM参数生成HeapDump,并使用VisualVM工具定位问题。源码分析帮助找到问题代码行,提出通过构造器配置或环境变量配置禁用特定功能(-Djxl.nogc=true)来解决此问题。

问题现象

每次使用表格数据导出的时候都会感觉到服务卡顿,看了下服务的gc.log发现了fullgc日志:
gc

问题进一步定位

想看到是哪个线程触发fullgc的,服务启动时在VM options中多添加一个启动参数-XX:+HeapDumpBeforeFullGC来获取问题发生时dump文件。

-XX:+UseG1GC -XX:+HeapDumpBeforeFullGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/xxx/logs/heapdump.hprof -XX:+PrintGC -XX:+PrintGCCause -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/xxx/logs/gc.log -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5004

问题复现后使用VisualVM工具定位问题

heapdump

源码分析

根据堆栈信息能定位到代码行:
sourcecode

问题解决

现在问题就很简单了,是可配置的进行gc选择,具体有两种方式:

构造器配置

constructor
envrioment variable

环境变量配置

assignment

即启动参数后增加:

-Djxl.nogc=true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值