我試圖調試內存不足錯誤。當我用Jmap做堆轉儲並用Eclipse Mat分析結果時 - 我看到以下內容。如何調試Web應用程序中的OutOfMemoryException
7,677 instances of "java.lang.Class", loaded by
"<system class loader>" occupy 48,094,720 (23.99%) bytes.
最大的實例:
class blah.BlahService$$EnhancerByCGLIB$$4a0a7d43 @ 0x2aaab06d9668
- 2,067,096 (1.03%) bytes.
BlahService是@Service註解彈簧的服務。所有的服務類別在春天都是單身人士 - 每個國際奧委會每個人一個服務類別 - 那麼爲什麼這個班級會成爲最高級的嫌犯。
我也看到
One instance of "org.apache.jasper.servlet.JspServlet" loaded by
"org.apache.catalina.loader.StandardClassLoader @ 0x2aaac17bc260" occupies 42,724,168
(21.31%) bytes. The memory is accumulated in one instance of
"java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "<system class loader>".
這是什麼意思?
您只顯示佔用少於100 MiB內存的對象。這對於Tomcat應用程序來說並不多。你難道沒有看到其他渴望記憶的東西嗎?也許你應該增加堆大小('-mx'),對Tomcat/Spring來說默認值太低。 –
你的意思是** OutOfMemoryError **? Java API中不存在OutOfMemoryException。 這不是一個例外,而是一個錯誤,我認爲你不能從中恢復。 –