Error java.lang.OutOfMemoryError: GC overhead limit exceeded

后端 未结 20 2773
攒了一身酷
攒了一身酷 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

    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

提交回复
热议问题