CPUQuota в Linux средствами systemd

CPUQuota в Linux средствами systemd


CPUQuota — ограничение потребления CPU средствами системы инициализации systemd, которое удобно использовать на серверах с несколькими пользователями.

CPUQuota — ограничение потребления CPU для пользователя

Часто бывает такое, что процессы одного пользователя потребляют слишком много ресурсов, что сказывается на работе всей машины, нагрузку замечают другие пользователи.

Существует несколько способов ограничить потребление CPU.

Стандартный nice / renice не очень удобен потому, что применяется к выполняющимся процессам, ко всем процессам определенного пользователя применять ограничения таким образом можно, но нужно это дополнительно скриптовать.

То же относится к утилите cpulimit.

Для shell пользователя можно выставить nice и все порождаемые процессы в рамках ssh сессии будут иметь указанный администратором приоритет.

Любые ограничения по процессору на уровне операционной системы задаются через cgroups

cgroups на низком уровне позволяет ограничивать все процессы порождаемые определенной командой.

cgcreate -g cpu:/cpulimited
cgset -r cpu.shares=128 cpulimited
cgexec -g cpu:cpulimited КОМАНДА

limits.conf

Можно лимитировать потребление процессора задавая количество процессорных минут в /etc/security/limits.conf

Можно поставить максимальное количество минут CPU и максимальное количество процессов для пользователя.

1 процессорная минута — это 100% загрузка одного ядра процессора в течение одной минуты.

systemd CPUQuota

Чтобы задать ограничение средствами systemd прежде всего нужно найти id пользователя. Его можно посмотреть в файле /etc/passwd

Например, пользователь user13

cat /etc/passwd | tail -n 1

user13:x:512:512::/var/www/user13/data:/bin/bash

Далее от имени root выполняем

systemctl edit --force user-512.slice

Идентификатор пользователя для передачи systemctl взят из /etc/passwd

В Unit файле задаём CPUQuota

[Slice]

CPUQuota=10%

Со следующим логином пользователя в системе ограничение будет применяться.

На скриншоте показано как можно задать лимит для системного пользователя git:



Report Page