Сборщик мусора: CMS прервала проблему с очисткой? - PullRequest
1 голос
/ 15 ноября 2011

У меня проблема с кучей памяти. Ежедневная память увеличивается на 100 МБ и продолжает увеличиваться, и FULL GC работал после лимита 1,5 ГБ, но все равно не восстанавливался. проверив логи, увидев CMS: прервать preclean? Это может быть фактором. любая помощь приветствуется.

CMS: прервать очистку из-за времени ?? Есть идеи, как решить эту проблему?

Среда: Java 1.6

Here are my GC params:


-Dfile.encoding=UTF-8 \
  -Duser.timezone=US/Eastern \
  -Dsun.net.inetaddr.ttl=60 \
  -Dsun.net.inetaddr.negative.ttl=60 \
  -Xms1024m \
  -Xmx1536m \
  -Xss512k \
  -verbose:gc  \
  -Xloggc:$CATALINA_BASE/logs/gc_log \
  -XX:+DisableExplicitGC \
  -XX:+HeapDumpOnOutOfMemoryError \
  -XX:+PrintGCDetails \
  -XX:+PrintGCTimeStamps \
  -XX:+UseConcMarkSweepGC \
  -XX:+UseParNewGC \
  -XX:CMSInitiatingOccupancyFraction=50 \
  -XX:GCTimeRatio=99 \
  -XX:MaxNewSize=512m \
  -XX:MaxTenuringThreshold=30 \
  -XX:NewSize=512m \
  -XX:SurvivorRatio=6 \
  -XX:TargetSurvivorRatio=90 \

**495747.455: [CMS-concurrent-mark-start]
495749.159: [CMS-concurrent-mark: 1.705/1.705 secs] [Times: user=1.91 sys=0.05, real=1.71 secs] 
495749.159: [CMS-concurrent-preclean-start]
495749.166: [CMS-concurrent-preclean: 0.006/0.007 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
495749.166: [CMS-concurrent-abortable-preclean-start]
495752.728: [GC 495752.728: [ParNew: 432226K->29458K(458752K), 0.0462900 secs] 1419590K->1016821K(1507328K), 0.0464200 secs] [Times: user=0.08 sys=0.00, real=0.04 secs] 
 CMS: abort preclean due to time 495754.230: [CMS-concurrent-abortable-preclean: 2.067/5.063 secs] [Times: user=2.43 sys=0.11, real=5.06 secs] 
495754.230: [GC[YG occupancy: 146431 K (458752 K)]495754.230: [Rescan (parallel) , 0.0446310 secs]495754.275: [weak refs processing, 0.0000080 secs] [1 CMS-remark: 987363K(1048576K)] 1133794K(1507328K), 0.0447400 secs] [Times: user=0.07 sys=0.00, real=0.05 secs]**

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Прекращаемая предварительная очистка отменяется. Это может быть проблемой, но я подозреваю, что меньше всего вас беспокоит.

Если память не очищается после полного ГХ, то это потому, что эта память где-то сохраняется. Я хотел бы сделать дамп кучи, чтобы увидеть, почему эта память сохраняется. то есть есть ресурсы, за которые вы держитесь.

Пока вы расследуете, я бы попытался увеличить объем доступной памяти. например Новый размер 2 ГБ и постоянное пространство 2 ГБ. Больший размер молодого поколения уменьшит количество объектов, попадающих в арендованное пространство и нуждающихся в дальнейшей уборке.

Я бы не стал настраивать столько параметров, сколько JVM может настроить достаточно эффективно.

1 голос
/ 05 июня 2014

Похоже, дубликат этот вопрос

Я думаю, что проблема с 2 параметрами

-XX:CMSInitiatingOccupancyFraction=50

Параллельная коллекция вызывается, если занятость Арендаторапоколение превышает это значение.Возможно, заполняемость постоянно превышает 50%, что неоднократно вызывает коллекции, что приводит к полной сборке мусора.(По умолчанию это 68%)

-XX:GCTimeRatio=99

Ошибка может быть связана с этим параметром, поскольку временное соотношение ГХ составляет 1%, а предварительная чистая фаза заняла ~ 2 секунды из 5 секунд, поэтомупредчистка могла быть прервана из-за истечения времени ожидания.(Я думаю, что по умолчанию 5%)

Увеличение Xmx должно решить проблему, но я согласен с Питером Лори, что вам не следует настраивать JVM так сильно, если вы не уверены в том, как флаги влияютрабочий.Также прочитайте эту ссылку по настройке ГХ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...