Rlimit (limite de ressources d'un processus)
Rlimit (en anglais resource limit) : plafond qu'un processus porte pour une ressource (descripteurs ouverts, processus, taille de fichier, temps processeur), avec une limite souple appliquée et une limite stricte qui la borne ; il est hérité par les enfants.
Un processus ordinaire peut placer sa limite souple entre 0 et la stricte, et abaisser la stricte de façon irréversible ; seul un détenteur de CAP_SYS_RESOURCE peut la relever. On les lit avec ulimit -n (le shell), /proc/<pid>/limits ou prlimit --pid <pid>, qui sait aussi les modifier à chaud. Qui les fixe dépend de la chaîne : pour une session (SSH, su, cron), pam_limits applique /etc/security/limits.conf ; pour un service, systemd applique LimitNOFILE= et ses voisines, ou à défaut DefaultLimitNOFILE=1024:524288 (systemd 255).
Le piège classique : relever nofile dans limits.conf, le vérifier avec sudo -u signalements bash -c 'ulimit -n', et constater que le service tourne toujours avec 1 024, puisque PAM ne s'applique pas aux services. Autres limites mal comprises : RLIMIT_NPROC compte par utilisateur, pas par service, et RLIMIT_AS borne l'espace d'adressage virtuel ; pour plafonner la mémoire, ce sont les cgroups qu'il faut (MemoryMax=).
Dans les cours
- Linux : administration système, leçon 11 : Borner les ressources : limites et cgroups
- Linux : administration système, leçon 3 : Le noyau : modules et paramètres
- Linux : administration système, leçon 13 : Authentification : PAM, NSS et annuaires