Назад | Перейти на главную страницу

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

Контекст: я пытаюсь настроить 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 :)