Sobes.tech
Back to questions
Senior
7

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

Companies where asked
WildberriesWildberries

Answer from AI

sobes.tech AI

Для ограничения использования оперативной памяти процесса через cgroups в Linux нужно:

  1. Создать или использовать существующую cgroup в подсистеме памяти (memory).
  2. Установить лимит памяти, записав нужное значение в файл memory.limit_in_bytes.
  3. Добавить PID процесса в файл cgroup.procs этой cgroup.

Пример:

# Создаём директорию cgroup (если используется cgroup v1)
sudo mkdir /sys/fs/cgroup/memory/mygroup

# Устанавливаем лимит памяти, например 500МБ
echo $((500*1024*1024)) | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes

# Добавляем процесс с PID 1234 в эту cgroup
echo 1234 | sudo tee /sys/fs/cgroup/memory/mygroup/cgroup.procs

Для cgroup v2 команды и пути могут отличаться, например:

# Создаём cgroup
sudo mkdir /sys/fs/cgroup/mygroup

# Устанавливаем лимит памяти
echo $((500*1024*1024)) | sudo tee /sys/fs/cgroup/mygroup/memory.max

# Добавляем процесс
echo 1234 | sudo tee /sys/fs/cgroup/mygroup/cgroup.procs

Важно: для работы с cgroups нужны права root или соответствующие привилегии. Также стоит учитывать, что при превышении лимита памяти процесс может быть убит ядром (OOM killer).