從報錯內容很清楚是Metaspace區域oom了
大部分情況下,程式執行中不會出現過多的類載入數量的變動,先匯入dump檔案檢查是否有異常的classLoader或者有異常動態生成的class
發現了下面這個classLoader數量異常,專案中用到nashorn這塊js引擎來做動態js指令碼執行
通過查閱nashorn原始碼發現
https://github.com/JetBrains/jdk8u_nashorn/blob/master/src/jdk/nashorn/internal/runtime/Context.java
有_loader_per_compile引數可以控制ClassLoader的建立是否複用
預設為true代表每次compile js指令碼都會新建立一個classLoader,用下面的方式改造一下js引擎的建立方式
改造前測試200次 發現建立了200個ScripLoader
改造後測試發現ScriptLoader數量不再變化了