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

Очень долго не могу найти решение проблемы контроля использования оперативной памяти Firefox (да и другими программами) так, чтобы это работало, как действует утилита Firemin в Windows, т.е. чтобы не происходило удаления процесса при превышении определенного порога использования RAM в системе.

Можно ли получить от специалистов четкую инструкцию, как настроить такое поведение для любой программы в Ubuntu?

Есть разные утилиты (Earlyoom, Nohang и прочее), есть cgroup, но там как я понимаю, все в итоге приводит к убийству процесса и это грубое решение, приводящее к не комфортному использованию того же Firefox.

Нужно именно настроить ограничение так, чтобы например при достижении браузером уровня 700Мб RAM, дальше эта цифра не возрастала и браузер при этом корректно продолжал свою работу.


Ответы (1 шт):

Автор решения: eri

Первый момент - если процесс кушает память, то он считает её свободной, а если она свободна то почему бы не позволить ему её кушать? Пусть ест!

В случае cgroup нужно выделить память в подкачке, тогда процесс не будет убит по OOM

cgcreate -g memory:firefoxlimited
echo 700M > /sys/fs/cgroup/memory/firefoxlimited/memory.limit_in_bytes
echo 4G > /sys/fs/cgroup/memory/firefoxlimited/memory.memsw.limit_in_bytes

cgexec -g memory:firefoxlimited firefox

или убрать килера

echo 1 > /sys/fs/cgroup/memory/firefoxlimited/memory.oom_control

Не забудьте включить cgroup в загрузчике /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT=".... cgroup_enable=memory swapaccount=1 ...."

и sudo update-grub

В cgroup2 параметры называются подругому и создать группу проще

https://facebookmicrosites.github.io/cgroup2/docs/create-cgroups.html

https://facebookmicrosites.github.io/cgroup2/docs/memory-controller.html

→ Ссылка