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:
Смотрите пример практического применения изменения приоритетов для процессов (в данном случае ограничение не по CPU, а по дисковым операциям)