今天現場weblogic報java.lang.OutOfMemoryError: GC overhead limit exceeded,在metalink查了下,有明白解釋,要設置一個JVM參數。只是因為當前weblogic內存設置為4G,所以設置參數的做法事實上並非解決這個問題之道。還是要分析weblogic 內存溢出文件,得出是哪個功能有問題:
APPLIES TO:
Oracle WebLogic Server - Version 10.3 and laterInformation in this document applies to any platform.
***Checked for relevance on 22-Oct-2014***
SYMPTOMS
Issue of getting below "java.lang.OutOfMemoryError: GC overhead limit exceeded" exception in WebLogic 10.3 and above versions was reported when running with Sun JDK 1.6 with all fix packs:
java.lang.OutOfMemoryError: GC overhead limit exceeded.
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:216)
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at weblogic.servlet.internal.ServletRequestImpl.toString(ServletRequestImpl.java:243)
at java.lang.String.valueOf(String.java:2827)
Truncated. see log file for complete stacktrace
CAUSE
The "java.lang.OutOfMemoryError: GC overhead limit exceeded" message means that for some reason the garbage collector is taking an excessive amount of time.
The parallel collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection or less than 2% of the heap is recovered by garbage collection, an OutOfMemoryError will be thrown.
This feature of throwing "GC overhead limit exceeded" message is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small.
--原因是垃圾回收器因為某些原因花了非常長時間。並行的垃圾回收器拋出內存溢出的錯誤。要么是花了非常長時間做GC的操作,或是僅僅有2%的堆內存又來回收。GC overhead limit exceeded被設計出來,是為了阻止應用程序執行的時候。因為堆內存設置的小而沒有進展。
SOLUTION
You can avoid the above "java.lang.OutOfMemoryError: GC overhead limit exceeded" exception by disabling the GC overhead limit feature in Sun JDK 1.6 by adding the following argument to the start script of JVM:
However, please note that disabling the overhead limit only avoids getting the OutOfMemoryError at an early stage. The OutOfMemoryError is very likely to be thrown at a later stage, because it does not remove the underlying problem. You should still look into your application and JVM settings to find the cause of GC taking an excessively long time.
--避免這樣的錯誤,在JVM中顯示設置-XX:-UseGCOverheadLimit