網(wǎng)站域名備案資料seo客服
還是OneCoder在項目中沙箱的問題,用classloader隔離做的沙箱,反復運行用戶的任務,出現(xiàn)永生區(qū)內(nèi)存溢出:
java.lang.OutOfMemoryError: PermGen space
這個問題在tomcat重復熱部署的時候其實比較常見。其道理也和我們沙箱的道理基本一致,就是每次任務運行的類沒有卸載掉。而永生區(qū)正式存儲加載入classloader中的類,反射的方法等的地方。如此只增不減,自然會產(chǎn)生溢出。
那么,什么情況下會產(chǎn)生沙箱中l(wèi)oader進來的類不會被回收的情況呢?
全文詳見個人獨立博客:https://www.coderli.com/log4j-permgen-space-leak/
log4j 和 java.lang.OutOfMemoryError PermGen space | OneCoder 還是OneCoder在項目中沙箱的問題,用classloader隔離做的沙箱,反復運行用戶的任務,出現(xiàn)永生區(qū)內(nèi)存溢出: java.lang.OutOfMemoryError: PermGen space 這個問題在tomcat重復熱部署的時候其實比較常見。其道理也和我們沙箱的道理基本一致,就是每次任務運行的類沒有卸載掉。而永生區(qū)正式存儲加載入classloader中的類,反射的方法等的地方。如此只增不減,自然會產(chǎn)生溢出。 那么,什么情況下會產(chǎn)生沙箱中l(wèi)oader進來的類不會被回收的情況呢?簡單說,就是當外部loader里加載的類,持有了沙箱loader中的加載的類的實例時。道理簡單,但是實際項目中,尋找這種可能情況就復雜的多了。為了說明這個道理,我們做個簡單的試驗。 ClassLoader加載試驗 試驗思想,基本思想就是循環(huán)創(chuàng)建Classloader手動加載包,并通過反射調(diào)用包中的代碼,考察在外部loader有無引用的情況下,PermGen區(qū)的變化情況。監(jiān)控工具,即為JDK自帶的Java VisualVM。 場景一、無引用https://www.coderli.com/log4j-permgen-space-leak/加入頻道領免費Java學習資料:https://pd.qq.com/s/dzb1xn6cd
加入大佬免費帶隊Java學習群:https://qm.qq.com/q/dmeTdieKOs