Skip to content

Latest commit

 

History

History
118 lines (87 loc) · 4.53 KB

cgroups_resource_limits_debian_ubuntu.md

File metadata and controls

118 lines (87 loc) · 4.53 KB

Как ограничить использование процессора и памяти с помощью групп в Debian/Ubuntu

Источник: Как ограничить использование процессора и памяти с помощью групп в Debian/Ubuntu

Cgroups - это гибкая функция ядра Linux, позволяющая ограничивать, контролировать и использовать ресурсы аккаунта. Cgroup - это набор задач для подсистем, обычно это контроллер ресурсов.

Файловая система типа cgroup монтируется и все операции выполняются над ней.

Установка

Установка может быть выполнена с использованием любого из libcgroup, cgmanager или systemd.

Использование

Их можно использовать несколькими способами

  • Получая прямой доступ к файловой системе cgroup.
  • Использование клиента cgm (часть cgmanager).
  • Через cgcreate, cgexec и cgclassify (часть cgroup-tools).
  • Через cgconfig.conf и cgrules.conf (также является частью cgroup-tools).

Мы будем использовать этот последний вариант, поэтому установите cgroup-tools с

$ sudo apt-get install cgroup-tools

Debian по умолчанию отключает контроллер памяти, мы можем включить его, добавив следующее в /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1"

Итак, обновите Grub

$ sudo update-grub

Теперь, когда среда и инструменты готовы, мы определим некоторые «роли» в /etc/cgconfig.conf

    group app/editor {
      cpu {
        cpu.shares = 500;
      }
      memory {
        memory.limit_in_bytes = 1000000000;
      }
    }
    
    group app/browser {
      cpu {
        cpu.shares = 300;
      }
      memory {
        memory.limit_in_bytes = 1000000000;
      }
    }
    
    group app/util {
      cpu {
        cpu.shares = 300;
      }
      memory {
        memory.limit_in_bytes = 500000000;
      }
    }

Максимальное значение для cpu.shares равно 1000, поэтому 300 устанавливает 30% предела использования для приложения с этой «ролью». memory.limit_in_bytes является самоописательной.

Мы свяжем эти «роли» и приложения в /etc/cgrules.conf

    *:emacs         cpu,memory      app/editor/
    *:conkeror      cpu,memory      app/browser/
    *:firefox       cpu,memory      app/browser/
    *:slack         cpu,memory      app/util/
    *:dropbox       cpu,memory      app/util/

Теперь нам нужно применить правила с помощью команд

$ cgconfigparser -l /etc/cgconfig.conf
$ cgrulesengd

Добавьте их в /etc/rc.local для применения при перезагрузке.

Вот и все!

Мы можем проверить, были ли применены наши новые правила, используя

$ cat /proc/`pidof dropbox`/cgroup | grep app
# 5:memory:/app/util
# 2:cpu,cpuacct:/app/util

И мы можем проверить использование памяти процесса с

smem -P dropbox    
# PID User     Command                         Swap      USS      PSS      RSS
# 1955 fernando /home/fernando/.dropbox-dis        0   191800   192388   201124

References


cgroups Ubuntu