Как установить ограничение памяти для определенного процесса?

10

Я попытался выполнить mpiexec -16 ...на сервере ОЗУ 384 ГБ, но это вызвало OOM Killer и был прерван.

Как я могу установить ограничение памяти для mpiexecвыполнения?

Я знаю ulimit, но это может повлиять на другие процессы.

Спасибо.

Benben
источник

Ответы:

9

Я думаю, что это можно сделать с помощью cgroups:

Создайте cgroup с именем mpigroup(или любым другим именем по вашему выбору) с ограничением памяти (например, 50 ГБ):

cgcreate -g memory,cpu:mpigroup
cgset -r memory.limit_in_bytes=$((50*1024*1024*1024)) mpigroup

Затем, если mpiexec уже запущен, перенесите его в эту группу:

cgclassify -g memory,cpu:mpigroup $(pidof mpiexec)

Или выполнить mpiexecв этой группе:

cgexec -g memory,cpu:mpigroup mpiexec -16 ...
Мур
источник
Разве memoryконтроллера не должно быть достаточно cgcreate -g memory:mpigroup?
Heemayl
@ Heemayl должно быть. Я только что поднял этот пример прямо из вики
Муру
настройки хранятся в / sys / fs / cgroup / memory /, и для работы sudo требуется, даже если он не
Aquarius Power
Мне удалось ограничить физическую память до 2 ГБ, она отлично работала, но виртуальная память по-прежнему собиралась до 8 ГБ, но это было вполне нормально, потому что игра Wine просто использовала бы своп вместо отправки всех других приложений Linux для свопинга, и это сделало вся система работает лучше! Спасибо!
Водолей Сила