线上反馈GC比较频繁。然后我们通过GC.log来锁定GC代码。
1. 打印GC日志文件到磁盘:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/logs/gc.log
2. 查看GC日志:cat gc.log
锁定发生GC的时间:“2020-05-11T16:42:02”
然后在日志文件中查找这个时间左右的接口调用日志:
可以看出是导出订单列表接口,触发了GC。
然后通过查看导出Excle代码发现,这里使用第三方库(org.apache.poi)的Excle导出时,触发了GC。
workbook.close();底层代码中调用了
if (!workbookSettings.getGCDisabled())
{
System.gc(); // 触发了GC
}
解决办法,关闭GC,如下:
WorkbookSettings settings = new WorkbookSettings();
settings.setGCDisabled(true); // 关闭GC
WritableWorkbook workbook = Workbook.createWorkbook(os, settings);
WritableSheet sheet = workbook.createSheet("Sheet1", 0);