Какие настройки Java -Xmx я могу разумно ожидать для работы на сервере AWS EC2 Ubuntu?

  • Каков ваш опыт? Можете ли вы подтвердить мои экспериментальные результаты?
  • Могу ли я обычно использовать общий объем ОЗУ - 600 МБ , или 0,4 * общий объем ОЗУ ?
  • Или это всегда метод проб и ошибок, и надеетесь, что он достаточно низкий?

Контекст: я пытаюсь настроить jenkins на экземпляре T3, экспериментируя с Ubuntu Server 16.04 и 18.04.

Я начал с экземпляра t3.micro (1 ГБ ОЗУ), но обнаружил, что убийца OOM убивает мой Java-процесс, как только я использую больше, чем примерно -Xmx400m , что кажется довольно низким. Я ожидал, что смогу использовать больше, например -Xmx750m .

Означает ли это, что серверу Ubuntu требуется около 600 МБ для работы?

Проблема в том, что запускается процесс java, даже если я установил и -Xms, и -Xmx на очень высокое значение, например 700m . Процесс завершается только позже, когда я делаю первый запрос на веб-сайт.

Сейчас я экспериментирую с экземпляром t3.small (2 ГБ ОЗУ), но снова очень не уверен, что настроить .

В Windows это детерминировано: я установил для -Xms и -Xmx одинаковое значение. Если служба не запускается, значение было слишком высоким. Если служба запускается успешно, значение в порядке, а память зарезервирована для моего процесса.

Немного предыстории:

0
задан 9 May 2019 в 21:32
1 ответ

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

Если OOM-убийца вообще срабатывает, это означает, что у вас в первую очередь закончилась память. Если это происходит с -Xmx400, то это предел для данного конкретного приложения в этой конкретной среде, выполняющего определенные действия.

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

С учетом всего вышесказанного: значения по умолчанию обычно хороши в 80% -90% случаев использования. Для Дженкинса значения по умолчанию в ядре должны работать достаточно хорошо. Вы захотите, чтобы ядро ​​превышало объем доступной памяти (что по умолчанию) и заставляло его запускать OOM, когда она действительно заканчивается (также по умолчанию).

Если это не работает с доступной у вас памятью, вы понадобится больше памяти. Также вредным считается установка больших значений -Xmx, которые не требуются приложению, но вы спрашивали о памяти Linux, а не о памяти Java :)

0
ответ дан 5 December 2019 в 02:59

Теги

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