Full GC в реальном времени намного больше времени пользователя + sys - PullRequest
12 голосов
/ 15 июня 2010

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

74477,402: [Полный ГХ [PSYoungGen: 3648K-> 0K (332160K)] [PSOldGen: 778476K-> 589497K (819200K)] 782124K-> 589497K (1151360K) [PSPermGen: 102671K681,67216646> 102676> 102676> 102676> 102676> 102676> 102676>> 102676606>> 102676166>> 102676326>> 102676606>> 102676686> 646326325 (?)> 642: 642: 646 секунд] [ Время: пользователь = 3,84 сис = 3,72, реальное = 646,17 с ]

Я не понимаю, как это возможно, что реальное время , потраченное на Full GC, составляет около 11 минут (646 секунд), тогда как user + sys times просто 7,5 секунд. 7,5 секунд кажутся мне гораздо более логичным временем, чтобы потратить на очистку <200 МБ от старого поколения. Куда уходит все остальное время? </p>

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

1 Ответ

10 голосов
/ 15 июня 2010

Куда уходит все остальное время?

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

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

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

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

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

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