общий объем ОЗУ - 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
одинаковое значение. Если служба не запускается, значение было слишком высоким. Если служба запускается успешно, значение в порядке, а память зарезервирована для моего процесса.
Немного предыстории:
Если вы хотите запустить какое-либо приложение в Linux в среде с ограниченными ресурсами, вам следует убедиться, что вы понимаете, как на самом деле работает память в Linux. Звучит грубо, но на самом деле это единственный способ понять, что происходит за кулисами.
Если OOM-убийца вообще срабатывает, это означает, что у вас в первую очередь закончилась память. Если это происходит с -Xmx400, то это предел для данного конкретного приложения в этой конкретной среде, выполняющего определенные действия.
Прежде чем вы даже подумаете о настройке vm.overcommit_memory на значение, отличное от значения по умолчанию, убедитесь, что вы действительно понимать разницу между выделением и использованием памяти (с точки зрения системы виртуальной памяти Linux). В противном случае вы просто убедитесь, что никогда не сможете эффективно использовать системную память.
С учетом всего вышесказанного: значения по умолчанию обычно хороши в 80% -90% случаев использования. Для Дженкинса значения по умолчанию в ядре должны работать достаточно хорошо. Вы захотите, чтобы ядро превышало объем доступной памяти (что по умолчанию) и заставляло его запускать OOM, когда она действительно заканчивается (также по умолчанию).
Если это не работает с доступной у вас памятью, вы понадобится больше памяти. Также вредным считается установка больших значений -Xmx, которые не требуются приложению, но вы спрашивали о памяти Linux, а не о памяти Java :)