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

问题进一步定位
想看到是哪个线程触发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工具定位问题

源码分析
根据堆栈信息能定位到代码行:

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


环境变量配置

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

1463

被折叠的 条评论
为什么被折叠?



