Параллельные провалы промоушена... В чем причина?

Я запускаю Java-программу, используя пространство кучи 3GB. Через некоторое время я замечаю это в логах gc.

Время нанесения: 0,8263100 секунд

2015-03-13T07:24:49.065-0700: 77177.620: [GC Before GC:

Статистика для BinaryTreeDictionary:


Всего свободного места: 2960457

Максимальный размер куска: 1233864

Количество блоков: 393

Средний. Размер блока: 7532

Высота дерева: 19

До GC:

Статистика для BinaryTreeDictionary:


Всего свободного места: 0

Максимальный размер куска: 0

Количество блоков: 0

Высота дерева: 0

77177.620: [ParNew (0: размер ошибки продвижения = 2154) (1: размер ошибки продвижения = 2154) (2: размер ошибки продвижения = 2154) (3: размер ошибки продвижения = 2154) (4: размер ошибки продвижения = 2154) (5: размер ошибки продвижения = 2154) (6: размер ошибки продвижения = 2154) (7: размер ошибки продвижения = 2154) (8: размер ошибки продвижения = 2154) (10: размер ошибки продвижения = 2154) (11: размер ошибки продвижения = 2154) (12: размер ошибки продвижения = 2154) (13: размер ошибки продвижения = 2154) (14: размер ошибки продвижения = 2154) (15: размер ошибки продвижения = 2154) (16: размер ошибки продвижения = 2154) (17: размер ошибки продвижения = 2154) (18: размер ошибки продвижения = 2154) (19: размер ошибки продвижения = 2154) (20: размер ошибки продвижения = 2154) (21: размер ошибки продвижения = 2154) (22: размер ошибки продвижения = 2154) (23: размер ошибки продвижения = 2154) (24: размер ошибки продвижения = 2154) (25: размер ошибки продвижения = 2154) (26: размер ошибки продвижения = 2154) (27: размер ошибки продвижения = 2154) (ошибка продвижения): 346350K->333366K(393216K), 0,3779580 с]77177,998: [CMSCMS: большой блок 0x00000007b7da3200

: 2156277K-> 1695244K (2621440K), 11,2619970 с] 2481226K->1695244K(3014656K), [CMS Perm: 193077K->191199K(256000K)] После ГХ:

Статистика для BinaryTreeDictionary:


Всего свободного места: 118536640

Максимальный размер куска: 118536640

Количество блоков: 1

Средний. Размер блока: 118536640

Высота дерева: 1

После GC:

Статистика для BinaryTreeDictionary:


Всего свободного места: 0

Максимальный размер куска: 0

Количество блоков: 0

Высота дерева: 0

, 11,6404220 секунд] [Время: пользователь = 16,85 сис = 0,04, реальное = 11,64 с]

Общее время, в течение которого потоки приложения были остановлены: 11,6432380 секунд

Время применения: 0,0421420 секунд

Общее время, в течение которого потоки приложения были остановлены: 0,0189740 секунд.

Из-за этого Full GC моя программа была остановлена ​​на 11 секунд. Это вызвало огромную проблему с производительностью. Дело в том, что везде люди говорят [провал промоушена = фрагментация]. Если это так, то почему максимальный размер куска (1233864) до GC все же больше, чем все размеры блока сбоев продвижения (2154) вместе взятых.

Я проверил всюду и не смог найти причину этой проблемы.

Кто-нибудь здесь знает причину, почему это происходит?

1 ответ

Самое большое беспокойство при использовании этого сборщика - это неудачные промоушены, которые являются причиной расы между сбором молодого и старого поколений. Если сборщик должен продвигать молодые объекты старому поколению, но у него не было достаточно времени, чтобы освободить место, он должен сделать это в первую очередь, что приведет к полной коллекции STW - именно то, для чего предназначен этот сборщик CMS предотвращать. Чтобы этого не произошло, вы должны либо увеличить размер старого поколения (или всей кучи в этом отношении), либо выделить больше фоновых потоков для коллектора, чтобы он мог конкурировать со скоростью выделения объектов.

Другие вопросы по тегам