簡體   English   中英

Java GC(分配失敗)

[英]Java GC (Allocation Failure)

為什么總是“GC(分配失敗)”?

用於 linux-amd64 JRE ( 1.8.0_25 -b17) 的 Java HotSpot(TM) 64 位服務器 VM (25.25-b02),

CommandLine flags: 
-XX:CMSInitiatingOccupancyFraction=60 
-XX:GCLogFileSize=10485760 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:InitialHeapSize=32212254720 
-XX:MaxHeapSize=32212254720 
-XX:NewRatio=10 
-XX:OldPLABSize=16 
-XX:ParallelGCThreads=4 
-XX:+PrintGC 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintStringTableStatistics 
-XX:+PrintTenuringDistribution 
-XX:StringTableSize=1000003 
-XX:SurvivorRatio=4 
-XX:TargetSurvivorRatio=50 
-XX:+UseCompressedClassPointers 
-XX:+UseCompressedOops
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC
27.329: [GC (Allocation Failure) 27.329: [ParNew
Desired survivor size 44728320 bytes, new threshold 15 (max 15)
- age   1:   16885304 bytes,   16885304 total
: 349568K->16618K(436928K), 0.2069129 secs] 349568K->16618K(31369920K), 0.2070712 secs] [Times: user=0.78 sys=0.04, real=0.21 secs]


28.210: [GC (Allocation Failure) 28.210: [ParNew
Desired survivor size 44728320 bytes, new threshold 15 (max 15)
- age   1:   28866504 bytes,   28866504 total
- age   2:   12582536 bytes,   41449040 total
: 366186K->47987K(436928K), 0.2144807 secs] 366186K->47987K(31369920K), 0.2146024 secs] [Times: user=0.84 sys=0.01, real=0.22 secs]


29.037: [GC (Allocation Failure) 29.038: [ParNew
Desired survivor size 44728320 bytes, new threshold 2 (max 15)
- age   1:   28443488 bytes,   28443488 total
- age   2:   28386624 bytes,   56830112 total
- age   3:   12579928 bytes,   69410040 total
: 397555K->76018K(436928K), 0.2357352 secs] 397555K->76018K(31369920K), 0.2358535 secs] [Times: user=0.93 sys=0.01, real=0.23 secs]

“分配失敗”是 GC 循環啟動的原因。

“分配失敗”意味着 Eden 中沒有更多空間可以分配對象。 所以,這是年輕GC的正常原因。

較舊的 JVM 不打印次要 GC 周期的 GC 原因。

“分配失敗”幾乎是小 GC 的唯一可能原因。 Minor GC 啟動的另一個原因可能是 CMS 注釋階段(如果啟用了+XX:+ScavengeBeforeRemark )。

“分配失敗”是 GC 踢不正確的原因。 它是 GC 操作的結果。

GC 在沒有空間分配時啟動(取決於執行區域次要或主要 GC)。 一旦 GC 被釋放,如果空間足夠好,但如果沒有足夠的空間,它就會失敗。 分配失敗就是這樣一種失敗。 下面的文檔有很好的解釋https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc.html

在 jdk1.8 中使用 CMS GC 時會出現這個錯誤,我換了 G1 Gc 解決了這個問題。

 -Xss512k -Xms6g -Xmx6g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=70 -XX:NewRatio=1 -XX:SurvivorRatio=6 -XX:G1ReservePercent=10 -XX:G1HeapRegionSize=32m -XX:ConcGCThreads=6 -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM