Les cgroups (Control Groups) permettent d’isoler, limiter et surveiller l’utilisation des ressources (CPU, mémoire, I/O) des processus sous Linux. Couplés à systemd, ils deviennent une arme puissante pour garantir la qualité de service (QoS) et la stabilité des serveurs en production.
Prérequis
- Serveur Linux récent (Debian 12+, Rocky 9+, Ubuntu 22.04+)
- Accès root ou sudo
- Système utilisant systemd et cgroups v2 activé (par défaut sur toutes les distributions modernes)
1. Vérifier et activer cgroups v2
Vérifiez la version utilisée :
mount | grep cgroup
Vous devez voir /sys/fs/cgroup type cgroup2
.
Pour forcer cgroups v2 (si besoin, reboot requis) :
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
sudo reboot
2. Limiter les ressources d’un service systemd
Créez ou éditez un fichier d’override pour un service existant :
sudo systemctl edit nginx
Ajoutez dans le bloc [Service]
par exemple :
[Service]
CPUQuota=40%
MemoryMax=1G
IOReadBandwidthMax=/dev/vda 10M
IOWriteBandwidthMax=/dev/vda 10M
Rechargez et redémarrez le service :
sudo systemctl daemon-reload
sudo systemctl restart nginx
3. Créer un scope custom (pour un script ou batch)
systemd-run --unit=monjob --scope -p MemoryMax=512M -p CPUQuota=30% ./mon_script.sh
Le process sera isolé avec la QoS définie, sans impacter le reste du système.
4. Superviser les cgroups et les ressources
Utilisez les outils suivants :
systemctl status <service>
cat /sys/fs/cgroup/<unité>/memory.current
cat /sys/fs/cgroup/<unité>/cpu.stat
- Ou bien surveillez globalement :
systemd-cgtop
5. Cas d’usage avancé : garantir la stabilité d’un serveur critique
- Limiter les backups gourmands :
CPUQuota=10%
,MemoryMax=256M
- Garantir la priorité aux services web :
CPUShares=1024
pour le service web,CPUShares=100
pour les tâches batch - Contrôler la latence sur des bases de données :
IOWeight=1000
pour le service DB,IOWeight=100
pour les scripts secondaires
6. Automatiser les profils QoS par Ansible (exemple)
- name: Limiter les ressources NGINX
systemd:
name: nginx
enabled: true
daemon_reload: yes
state: restarted
drop_in: true
drop_in_options:
Service:
CPUQuota: "40%"
MemoryMax: "1G"
Conclusion
La gestion fine des cgroups avec systemd offre un contrôle total sur la consommation de ressources, renforce la sécurité, la performance et la résilience des serveurs Linux modernes, surtout en environnement multi-tenant ou cloud privé.