Прогрев приложений Java с высокой пропускной способностью

StackOverflow https://stackoverflow.com/questions/2247105

Вопрос

Недавно я узнал о сценариях, которые требуют прогрева приложения (с высокими требованиями к пропускной способности), прежде чем они начнут обслуживать реальные запросы.Логика, стоящая за этим, заключалась в том, чтобы позволить JIT творить чудеса производительности!

Является ли это нормой для приложений Java или это обычно делается для приложений с большим объемом памяти?

Это было полезно?

Решение

Если вы говорите о веб-приложении / веб-сайте с высоким трафиком, то JIT - это очень незначительная проблема.Самая большая проблема заключается в прогреве (заполнении) всех слоев кэша, которые вам понадобятся.Например, области ehcache, которые заполняются из спящего режима.Это потому, что операции, связанные с вводом-выводом, на порядки медленнее, чем все, что происходит внутри процессора (если только вы не вычисляете фракталы :)

Другие советы

Вопрос в том, когда бы вы хотели уйди со своего пути чтобы сделать это?

Если вы запускаете веб-приложение и оно СРАЗУ же запускается в режиме реального времени, то, пока вы его "прогреваете", вы добавляете дополнительную нагрузку, что контрпродуктивно.Аналогично обстоит дело и при запуске настольного приложения.Нет смысла подогревать, если пользователь собирается немедленно начать им пользоваться.Или, что еще хуже, не позволяя пользователю взаимодействовать, пока вы прогреваете приложение.

Если вы развертываете веб-приложение и тестируете развертывание перед тем, как направить на него свои средства балансировки нагрузки, то вы уже прогрели его в качестве побочного результата.

В дополнение к ответ херувима, Я могу придумать несколько других вопросов, которые требуют разминки:

  • Создание экземпляров объектов (отложенная загрузка, синглтоны и т.д.);
  • Распределение кучи (если ваш Xms меньше, чем ваш Xmx).

Я полагаю, что ОС также настраивается на поведение приложения, так что период прогрева также может повлиять на вызовы операционной системы.

Большинство из вышеперечисленных (заполнение кэша, инициализация объекта) не являются специфичными для Java.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top