问题现象
每次使用表格数据导出的时候都会感觉到服务卡顿,看了下服务的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