Error java.lang.OutOfMemoryError: GC overhead limit exceeded

后端 未结 20 2444
攒了一身酷
攒了一身酷 2020-11-21 05:23

I get this error message as I execute my JUnit tests:

java.lang.OutOfMemoryError: GC overhead limit exceeded

I know what an OutOfMemo

相关标签:
20条回答
  • 2020-11-21 05:50

    Quoting from Oracle's article "Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning":

    Excessive GC Time and OutOfMemoryError

    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 and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature 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. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line.

    EDIT: looks like someone can type faster than me :)

    0 讨论(0)
  • 2020-11-21 05:50

    Cause for the error according to the Java [8] Platform, Standard Edition Troubleshooting Guide: (emphasis and line breaks added)

    [...] "GC overhead limit exceeded" indicates that the garbage collector is running all the time and Java program is making very slow progress.

    After a garbage collection, if the Java process is spending more than approximately 98% of its time doing garbage collection and if it is recovering less than 2% of the heap and has been doing so far the last 5 (compile time constant) consecutive garbage collections, then a java.lang.OutOfMemoryError is thrown. [...]

    1. Increase the heap size if current heap is not enough.
    2. If you still get this error after increasing heap memory, use memory profiling tools like MAT ( Memory analyzer tool), Visual VM etc and fix memory leaks.
    3. Upgrade JDK version to latest version ( 1.8.x) or at least 1.7.x and use G1GC algorithm. . The throughput goal for the G1 GC is 90 percent application time and 10 percent garbage collection time
    4. Apart from setting heap memory with -Xms1g -Xmx2g , try

      -XX:+UseG1GC -XX:G1HeapRegionSize=n -XX:MaxGCPauseMillis=m  
      -XX:ParallelGCThreads=n -XX:ConcGCThreads=n
      

    Have a look at some more related questions regarding G1GC

    • Java 7 (JDK 7) garbage collection and documentation on G1

    • Java G1 garbage collection in production

    • Oracle technetwork article for GC finetuning

    0 讨论(0)
提交回复
热议问题