2013年7月6日土曜日

java.lang.OutOfMemoryError:GC overhead limit exceeded

Error log:
java.lang.OutOfMemoryError:GC overhead limit exceeded
at java.lang.String.replace(String.java:2021)
at weblogic.utils.classloaders.CodeGenClassFinder.getClassSource(CodeGenClassFinder.java:24)
at weblogic.utils.classloaders.ChangeAwareClassLoader.upToDate(ChangeAwareClassLoader.java:107)
at weblogic.servlet.internal.FilterWrapper.needToReload(FilterWrapper.java:120)
at weblogic.servlet.internal.FilterWrapper.checkForReload(FilterWrapper.java:101)
at weblogic.servlet.internal.FilterWrapper.getFilter(FilterWrapper.java:41)
at weblogic.servlet.internal.FilterChainImpl.add(FilterChainImpl.java:35)
at weblogic.servlet.internal.FilterManager.getFilterChain(FilterManager.java:255)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3727)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
 SUBSYSTEM = HTTP USERID = <WLS Kernel> SEVERITY = Error THREAD = [ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)' MSGID = BEA-101020 MACHINE = cdcjp62.**.oracle.** TXID =  CONTEXTID = 0124868f65b997e9:-6942af24:13fadf1d49d:-8000-0000000000001714 TIMESTAMP = 1373067991979
WatchAlarmType: AutomaticReset
WatchAlarmResetPeriod: 30000

Root Cause:
This issue is seen with all version of WLS 10.3 and above when running with JDK1.6 with all fix packs.
java.lang.OutOfMemoryError:GC overhead limit exceeded -
Indicates that due to some reasons the garbage collection is taking an excesive amount of time.
Parallel collector will throw java.lang.OutOfMemory if much time is spent on GC. If more than 98% of time is spend in GC and less than 2% of hep is recovered an java.lang.OutOfMemoryError is thrown

Solution: (Workaround)
This java.lang.OutOfMemoryError:GC overhead limit exceeded can be avoided  by diadabling  the GC overhed feature in JDK 1.6 by using this argument to start scripts
-XX:-UseGCOverheadLimit.

0 件のコメント :

コメントを投稿