Что нужно проверять в gc.logs

Я знаю много вещей о том, что следует воспринимать из gc.logs, например

  • вы должны проверить, как часто запускается «Полный сборщик мусора», если он запускается часто, это признак проблемы
  • вы также должны проверить, сколько памяти «Полный сборщик мусора» может восстановить во время завершения, если его немного, то это снова признак проблемы, поскольку он заставит «Полный сборщик мусора» снова запуститься.
  • вам следует пересмотреть пространство кучи, выделенное для процесса java, если «Full GC» запускается часто.

Вот некоторые моменты, над которыми я работаю, мне было бы интересно узнать, о чем еще следует позаботиться, когда я просматриваю журналы gc.

К вашему сведению, я уже просмотрел следующие темы....


person Rupesh    schedule 07.12.2014    source источник


Ответы (1)


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

  • Сколько времени занимают второстепенные коллекции?
  • Сколько времени занимают основные коллекции?
  • Какова частота второстепенных коллекций?
  • Какова частота крупных коллекций?
  • Сколько восстанавливает незначительная коллекция?
  • Сколько восстанавливает крупная коллекция?
  • Комбинации вышеперечисленного

Большинство программ имеют очень частые второстепенные коллекции, которые занимают около 90-95% кучи, а остальное передают пространствам Survivor. Последующие коллекции очищают оставшихся в живых примерно на 80% снова, и, по сути, только от 2% до 4% вашей фактической второстепенной коллекции доходят до старого поколения, и циклы этого продолжаются, независимо от того, какой сборщик вы используете.

Теперь проблемы возникают, когда у вас есть сотни второстепенных коллекций небольшого размера на запрос приложения или поток, и при суммировании они занимают значительное время, в основном в секундах с двузначным числом. Так как в современных коллекторах мелкий проход и подметание не останавливают мировые случаи, то это терпимо. Со старым поколением проблемы возникают, когда сборщики бегают, но не забирают ничего крупного. например: обычно сборщик запускается, когда старое поколение заполнено примерно на 80-85%. Это может быть остановкой мирового эпизода, поскольку новые данные не могут быть сохранены в куче, если куча не имеет больше места, что, вероятно, имеет место здесь. Таким образом, потоки приложений приостанавливаются, чтобы позволить потокам сборщика мусора сначала очистить пространство. но как только сборщик завершает работу, коэффициент заполнения кучи не снижается так, как должен. Хороший размер должен уменьшить вашу кучу более чем на 40% за один раз. Если это не так, это означает, что вам нужно больше кучи для сохранения ваших долгоживущих объектов.

Таким образом, по сути, анализ GC - это не «сделать это на основе набора предопределенных шагов». Это скорее HTI и пробный анализ. Это скорее эксперимент, когда вы устанавливаете начальные размеры и настройки, а затем отмечаете или отслеживаете активность GC и записываете результаты. Затем, скажем, после 8-10 прогонов вы сравниваете записи и смотрите, что работает для вашего приложения, а что нет. Это действительно интересная тяжелая работа.

person Nazgul    schedule 07.12.2014