2015-02-05 3 views
69

Почему это всегда было «GC (Allocation Failure)»?Java GC (Ошибка распределения)

Java HotSpot (TM) 64-разрядного сервера VM (25,25-b02) для Linux-amd64 JRE (1.8.0_25 -b17),

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] 

ответ

116

"Распределение Failure" является причиной цикла GC для удара.

«Отказ от распределения» означает, что в Эдеме больше не осталось места для размещения объекта. Таким образом, это нормальная причина молодого GC.

Старые JVM не печатали причину GC для небольших циклов GC.

«Отказ от распределения» является почти возможной причиной для незначительного GC. Другой причиной незначительного удара GC может быть фаза замещения CMS (если включен +XX:+ScavengeBeforeRemark).

+1

Спасибо. Просто найдите, что старый JVM не печатает ошибку распределения. – user3644708

+0

Я не получаю этот ответ полностью, так что его следует избегать или нет? «Это нормальная причина молодого GC». Является ли молодой GC неправильным выбором? – Thomas

+4

Да, это нормальное поведение –

-3

При использовании CMS GC в jdk1.8 будет рассмотрена эта ошибка, я сменил 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 
Смежные вопросы