total RAM - 600 MB
, или 0.4 * total RAM
?Контекст: я пытаюсь настроить jenkins на экземпляре T3, экспериментируя с Ubuntu Server 16.04 и 18.04.
Я начал с t3.micro
экземпляра (1 ГБ ОЗУ), но обнаружил, что убийца OOM убивает мой Java-процесс, как только я использую больше, чем примерно -Xmx400m
, что кажется довольно низким. Я ожидал, что смогу использовать больше подобных -Xmx750m
.
Означает ли это, что для работы Ubuntu Server требуется около 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 :)