<Error> <HTTP> <localhost.localdomain> <esbServer> <[ACTIVE] ExecuteThread: ’0′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1241883485802> <BEA-101017> <[[email=weblogic.servlet.internal.WebAppServletContext@197c981]weblogic.servlet.internal.WebAppServletContext@197c981[/email]
– appName: ‘consoleapp’, name: ‘console’, context-path: ‘/console’] Root cause of ServletException.
java.lang.OutOfMemoryError: PermGen space
>
####<2009-5-9 下午11時38分07秒 CST> <Error> <Kernel> <localhost.localdomain> <esbServer> <[ACTIVE] ExecuteThread: ’0′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1241883487493> <BEA-000802> <ExecuteRequest failed
java.lang.OutOfMemoryError: PermGen space.
java.lang.OutOfMemoryError: PermGen space
錯誤解釋:
PermGen space的全稱是Permanent Generation space,是指記憶體的永久儲存地區。這一部分用於存放Class和Meta的資訊,Class在被 Load的時候被放入PermGen space地區,它和存放Instance的Heap地區不同,GC(Garbage Collection)不會在主程式運行期對PermGen space進行清理,所以如果APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤。
解決方案:
參考解決方案:
- 1、Increase MaxPerm size
- eg: -XX:+MaxPermSize=256m
- 2、These additional parameters may also be helpful in some cases.
- eg: -Xmn1228m -XX:+AggressiveHeap -Xms2048m -Xmx2048m
- 3、Enable JVM GC logging to analyse the issue if problem still persists by setting following parameter
- eg: -verbose:gc -XX:+PrintGCDetails
我的解決方案:可以在weblogic中設定setDomainEnv.sh :
參數 MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=512m"
最終成功解決!!
其中,-XX:+AggressiveHeap:
讓JVM自動根據機器的記憶體和CPU數最佳化各種參數,通常記憶體會使用機器的最大實體記憶體。
同時也產生了hs_err_pid23131.log
說明:java的應用有時候會因為各種原因Crash,這時候會產生一個類似java_errorpid.log的錯誤記錄檔。
在該日誌中發現了如下資訊:
PSPermGen total 65536K, used 65535K [0x6e0c0000, 0x720c0000, 0x720c0000)
object space 65536K, 99% used [0x6e0c0000,0x720bffc0,0x720c0000)
上面的資訊能看出在Crash的時候,JVM的PermSize空間幾乎已經消耗完了。因此,建議擴大PermSize和MaxPermSize的數值。