Automatiser l’isolation des ressources avec cgroups et systemd sous Linux

Publié le 22 juillet 2025

Administration Système
Linux
Performance
Sécurité

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é.

Besoin d'aide sur ce sujet ?

Notre équipe d'experts est là pour vous accompagner dans vos projets.

Contactez-nous

Articles similaires qui pourraient vous intéresser