線上反饋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);