Подтвердить что ты не робот

Полное GC реального времени - это намного больше, чем пользователь + sys times

У нас есть приложение на базе Java Java, работающее на JBoss с разрешенным максимальным размером кучи около 1,2 ГБ (общая физическая память машины составляет 2 ГБ). В какой-то момент приложение перестает отвечать на запросы (для клиентов) в течение нескольких минут. После некоторого анализа выяснилось, что виновником является полный GC. Здесь выдержка из подробного журнала GC:

<p> 74477,402: [Полный GC [PSYoungGen: 3648K- > 0K (332160K)] [PSOldGen: 778476K- > 589497K (819200K)] 782124K- > 589497K (1151360K) [PSPermGen: 102671K- > 102671K (171328K)], 646.1546860 secs] [ Times: user = 3.84 sys = 3.72, real = 646.17 secs]

Я не понимаю, насколько возможно, что реальное время, потраченное на Full GC, составляет около 11 минут (646 секунд), а пользователь + время sys всего 7,5 секунд. 7.5 секунд звучат для меня гораздо более логичное время, потраченное на очистку и 200 МБ от старого поколения. Где все другое время?

Большое спасибо.

4b9b3361

Ответ 1

Где все другое время идет?

Скорее всего, ваше приложение вызывает переполнение виртуальной памяти. В основном, вашему приложению требуется значительно больше страниц виртуальной памяти, чем есть физические страницы для их хранения. В результате большую часть времени он проводит, ожидая, когда vm-страницы будут прочитаны и записаны на диск.

Для получения дополнительной информации прочитайте эту страницу в Википедии.

Исключение - либо уменьшить использование виртуальной памяти, либо увеличить количество физической памяти в системе. Например, вы можете:

  • запустить на машине меньше приложений,
  • уменьшить размеры кучи Java-приложений или
  • Если вы работаете в виртуальном режиме, увеличьте виртуальное распределение физической памяти.

(Обратите внимание, что уменьшение размера кучи JVM может быть обоюдоострым мечом. Если вы уменьшите размер кучи слишком сильно, приложение либо умрет от OutOfMemoryErrors, либо потратит слишком много времени на сбор мусора, либо пострадает от невозможности кеширования эффективно.)