Есть ли руководство по поваренной книге для проблем GC? - PullRequest
33 голосов
/ 29 июля 2011

Почти все в конечном итоге сталкиваются с проблемами GC с Java.

Существует ли руководство по кулинарной книге или полуавтоматический инструмент для настройки GC для Java?

Мое обоснование таково:

  • Почти у всех в конечном итоге возникают эти проблемы
  • Существует множество возможных факторов (скажем, 20), из которых только несколько влияют на вашу проблему.
  • Большинство людей не знают, как определить ключевые факторы, поэтому настройка ГХ больше похожа на черное искусство, чем на науку.
  • Не все используют виртуальную машину HotSpot. Различные версии Sun имеют разные характеристики ГХ.
  • Нет стимула экспериментировать (например, запускать виртуальную машину с немного разными настройками каждый день, чтобы посмотреть, как они работают).

Таким образом, вопрос на самом деле таков: могу ли я что-то использовать в виде контрольного списка? Или, может быть, даже инструмент, который анализирует журналы GC или дампы кучи и дает мне конкретные подсказки, где искать (вместо того, чтобы сказать «95% данных размещено в объектах типа byte []», что в основном бесполезно).

Похожие вопросы:

Ответы [ 2 ]

20 голосов
/ 17 ноября 2012

Из различных ресурсов я составил контрольный список работоспособности , который я использую для анализа поведения GC и производительности моих приложений. Эти рекомендации являются общими и применяются к любой JVM, зависящей от поставщика, но содержат также информацию, относящуюся к HotspotVM, для иллюстрации.

  1. Отключить явный GC .Явный GC - плохая практика кодирования, она никогда не помогает.Используйте -XX:+DisableExplicitGC.

  2. Включить полное ведение журнала ГХ .Легкий, но мощный.

    • Вычислить Набор данных в реальном времени , Скорость распределения и Скорость повышения .Это скажет вам, если вам нужна большая куча или если ваш например.Young Gen слишком маленький, или если пространство Survivor переполнено и т. Д.
    • Вычислить общее время GC , оно должно составлять <5% от общего времени работы.</li>
    • Использование -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
  3. Рассмотреть дополнительные способы сбора информации о вашем GC .Ведение журнала - это хорошо, но иногда доступны легковесные инструменты командной строки, которые помогут вам лучше понять.Например.jstat для Горячей точки, которая покажет вам занятие / вместимость Эдема, Выжившего и Старого Генерала.

  4. Соберите гистограммы классов Это легкий вес и покажет вам содержимоекучи.Вы можете делать снимки всякий раз, когда замечаете какие-то странные действия GC, или вы можете делать их до / после полного GC: * ​​1048 *

    • Содержимое пространства OldGen : Вы можете узнать, какие объектыпроживать в OldGen.Вам необходимо распечатать гистограммы до и после Full GC.А поскольку коллекция YoungGen выполняется до полной GC, эти гистограммы покажут вам содержимое Старого поколения.Используйте -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC.
    • Обнаружение преждевременно продвинутых объектов : Чтобы определить, будут ли какие-либо экземпляры продвигаться раньше, вам нужно изучить гистограммы, чтобы увидеть, какие классы должны находиться в OldGen, а какие классыследует видеть только в YoungGen.Это не может быть сделано автоматически, вам нужно подумать о назначении каждого класса и его экземпляра, чтобы определить, является ли объект временным или нет.
  5. Рассмотрим различные GCАлгоритм .Виртуальные машины обычно поставляются с несколькими различными реализациями GC, которые обеспечивают различные компромиссы: пропускную способность, занимаемую площадь, без пауз / коротких пауз, в режиме реального времени и т. Д. Рассмотрите варианты, которые у вас есть, и выберите тот, который соответствует вашим потребностям.

  6. Остерегайтесь завершения () .Убедитесь, что GC идет в ногу с классами, используя finalize().Выполнение этого метода может быть довольно дорогостоящим, и это может повлиять на ГХ и пропускную способность приложения.

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

Использованные ресурсы:

Книги:

Доклады / статьи:

Списки рассылки:

15 голосов
/ 29 июля 2011

Ссылки на различную информацию о ГХ:

Oracle

Настройка сборки мусора с помощью виртуальной машины Java [tm] 5.0

и это тоже

Настройка виртуальной машины Java SE 6 HotSpot [tm]

IBM

Точная настройка сборки мусора [ссылка мертвая]

Расширяемый подробный инструментарий

SAP JVM

Управление памятью (сборка мусора)

Обнаружение утечек памяти

Обнаружение зависания / зацикливания виртуальных машин

Анализ ситуаций нехватки памяти

Извините, я мало что знаю о SAP, но предоставил кое-что, что нашел.

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

ДОПОЛНЕНИЕ

Вы также упомянули инструменты анализа. Некоторые кандидаты перечислены здесь:

Знаете ли вы какие-либо инструменты анализа журналов сборки мусора Java?

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