Ulimit
| Fiche express | |
|---|---|
| Domaine | Limites de ressources par utilisateur |
| Commande | ulimit
|
| Contexte | Shell (bash) + PAM (/etc/security/limits.conf)
|
| Voir aussi | /etc/security/limits.d/, PAM pam_limits
|
ulimit affiche et modifie les limites de ressources (fichiers ouverts, taille de core, mémoire verrouillée, nombre de processus...) appliquées à la session shell courante et à ses processus enfants. Ces limites sont fixées côté noyau par processus (soft/hard) et peuvent être configurées de façon persistante pour les sessions PAM via /etc/security/limits.conf.
Limites soft et hard
Chaque ressource a deux plafonds : la limite soft (celle réellement appliquée, modifiable à la hausse par le processus jusqu'à la limite hard) et la limite hard (le plafond absolu, que seul root peut relever). Sans option, ulimit agit sur la limite soft.
ulimit -a # toutes les limites courantes (soft)
ulimit -Ha # toutes les limites hard
ulimit -Sa # toutes les limites soft (équivalent de -a)
ulimit -n # limite courante de fichiers ouverts (soft)
ulimit -Hn # limite hard de fichiers ouverts
ulimit -n 2048 # relever la limite soft de fichiers ouverts à 2048 (pour la session courante)
⚠️ Un changement fait avec ulimit dans un shell ne s'applique qu'à ce shell et à ses enfants — il ne modifie rien pour les autres sessions déjà ouvertes ni pour les futurs logins. Pour une modification persistante, voir /etc/security/limits.conf ci-dessous, et penser à se déconnecter/reconnecter (ou relancer le service concerné) pour que le changement soit pris en compte.
Options courantes
-a Affiche toutes les limites actuelles
-c Taille maximale des fichiers core générés
-d Taille maximale du segment de données d'un processus
-e Priorité d'ordonnancement maximale ("nice")
-f Taille maximale des fichiers écrits par le shell et ses enfants
-i Nombre maximal de signaux en attente
-l Taille maximale pouvant être verrouillée en mémoire
-m Taille maximale du resident set (sans effet sur Linux)
-n Nombre maximal de descripteurs de fichiers ouverts
-p Taille des pipes en blocs de 512 octets (généralement non modifiable)
-q Nombre maximal d'octets dans les files de messages POSIX
-r Priorité d'ordonnancement temps réel maximale
-s Taille maximale de la pile (stack)
-t Temps CPU maximal en secondes
-u Nombre maximal de processus pour un même utilisateur
-v Quantité maximale de mémoire virtuelle disponible pour le shell
-x Nombre maximal de verrous de fichiers (file locks)
/etc/security/limits.conf
Fichier lu par PAM (pam_limits) pour fixer les limites des sessions utilisateur au login. Syntaxe : <domaine> <type> <item> <valeur>.
# domaine type item valeur
* soft core unlimited
* hard core unlimited
myuser soft nofile 4096
myuser hard nofile 8192
@mygroup soft nproc 2048
- domaine : nom d'utilisateur,
@groupe, ou*(défaut, ne s'applique pas à root). - type :
softouhard. - item : entre autres
core,data,fsize,memlock,nofile,nproc,rss,stack. - Les fichiers dans
/etc/security/limits.d/, lus par ordre alphabétique, surchargent ce fichier en cas de conflit sur le même domaine.
Cette configuration ne s'applique qu'aux connexions via PAM (login, ssh, su avec session PAM) — elle n'affecte pas les limites des services système (systemd, cf. LimitNOFILE= dans une unit) ni les sessions déjà ouvertes.
Cas fréquent : relever la limite de fichiers ouverts
Sur un serveur avec beaucoup de connexions simultanées (base de données, reverse proxy, JVM...), la limite par défaut de 1024 fichiers ouverts est vite atteinte.
ulimit -n # vérifier la limite actuelle
# 1024
# rendre le changement persistant pour un utilisateur donné :
cat >> /etc/security/limits.conf <<'EOF'
myuser soft nofile 65536
myuser hard nofile 65536
EOF
Ne pas oublier de se déconnecter/reconnecter à la session pour voir le changement pris en compte — ulimit -n lu dans une session déjà ouverte ne reflète que la limite fixée au login de cette session.
AIX
Sous AIX, ulimit existe aussi mais la gestion des limites utilisateur passe par chuser (attributs comme data_hard, fsize_hard...) plutôt que par /etc/security/limits.conf.
ulimit -a # limites courantes
ulimit -d unlimited # modifier une limite pour la session courante
# rendre une limite illimitée pour un utilisateur, de façon persistante :
chuser data_hard=-1 username
ulimit -d 64000 # ou fixer une valeur définie
ulimit -Hd # afficher la limite hard
ulimit -Sd # afficher la limite soft
Voir aussi
/etc/security/limits.confet/etc/security/limits.d/— persistance des limites via PAMsystemd— pour les services (directivesLimitNOFILE=,LimitNPROC=... dans les unit files), non couvertes parlimits.conf