Menu Fermer

Linux : augmenter la limite du nombre de fichiers ouverts

Lorsque l’on installe des applications de serveurs, on peut rencontrer des problèmes à cause de la limitation du nombre de fichiers, de descripteurs de fichiers ouverts qui est insuffisante.
Si ce nombre dépasse la limite fixée par défaut, on peut être confronté à des problèmes de contrôle d’accès et d’ouverture de fichiers. De nombreux environnements de production se retrouvent dans des situations de blocage à cause de cela.

Dans Linux, la commande ulimit vous permet de voir et de définir et d’obtenir l’état du nombre de fichiers ouverts et les détails de la configuration. Cette commande est dotée de nombreuses options et cette combinaison permet de définir le nombre de fichiers ouverts. Les commandes suivantes sont expliquées en détail, étape par étape, à l’aide d’exemples.

Ce tutoriel vous guide pour utiliser connaître le nombre de fichiers ouverts et augmenter la limite du nombre de fichiers ouverts. Ainsi, vous pouvez résoudre le problème lorsque la limite du nombre de fichiers maximum a été atteinte.

Augmenter le nombre de fichiers ouverts dans Linux

Augmenter le nombre de fichiers ouverts dans Linux

avec sysctl

Voici comment augmenter la limite du nombre de fichiers ouverts à l’ensemble du système.
Supposons que notre serveur Linux ait atteint la limite du nombre maximal de fichiers ouverts et que nous souhaitions étendre cette limite à l’ensemble du système, par exemple en fixant à 100 000 le nombre maximal de fichiers ouverts.

Utilisez la commande sysctl pour passer le paramètre fs.file-max au noyau Linux à la volée, exécutez la commande ci-dessous en tant qu’utilisateur root,

sysctl -w fs.file-max=100000

Les changements ci-dessus seront actifs jusqu’au prochain redémarrage, donc pour rendre ces changements persistants à travers le redémarrage, éditez le fichier /etc/sysctl.conf et ajoutez le même paramètre :

sudo vi /etc/sysctl.conf fs.file-max = 100000

Enregistrez et fermez le fichier.

Exécutez la commande ci-dessous pour que les changements ci-dessus soient immédiatement appliqués sans déconnexion ni redémarrage.

sysctl -p

Vérifiez ensuite que le système a pris en compte la nouvelle configuration, pour cela :

cat /proc/sys/fs/file-max

Enfin utilisez la commande ci-dessous pour savoir combien de descripteurs de fichiers sont actuellement utilisés :

more /proc/sys/fs/file-nr 1216 0 100000

Définir ulimit (limite de ressources au niveau de l’utilisateur) via le fichier limit.conf

Si vous souhaitez définir des limites de ressources pour des utilisateurs spécifiques, vous pouvez le faire via le fichier /etc/security/limits.conf.

Supposons que nous voulions fixer des limites dures et souples au nombre de fichiers ouverts pour l’utilisateur malekalmorte et pour l’utilisateur oracle fixer des limites dures et souples au nombre de processus ouverts, modifiez le fichier /etc/security/limits.conf et ajoutez les lignes suivantes :

# limite stricte du nombre maximum de fichiers ouverts pour l'utilisateur malekalmorte
malekalmorte       hard    nofile          4096
# limite souple du nombre maximum de fichiers ouverts pour l'utilisateur malekalmorte
malekalmorte       soft    nofile          1024

# limite stricte du nombre maximum de fichiers ouverts pour l'utilisateur mysql
mysql           hard    nproc          8096
# limite souple du nombre maximum de fichiers ouverts pour l'utilisateur mysql
mysql           soft    nproc          4096

Si vous souhaitez imposer une limite de ressources à un groupe plutôt qu’à des utilisateurs, vous pouvez également le faire via le fichier limit.conf, en remplaçant le nom de l’utilisateur par @<nom du groupe> et le reste des éléments sera identique, comme le montre l’exemple ci-dessous :

# limite stricte du nombre maximum de fichiers ouverts pour le groupe admin
@admin        hard         nofile            4096
# limite souple du nombre maximum de fichiers ouverts pour le groupe admin
@sadmin        soft         nofile            1024

Augmenter la limite de ressources pour l’utilisateur actuel

Vous pouvez modifier les limites de ressources par défaut pour l’utilisateur actuel en utilisant la commande ulimit avec l’option -u. Par exemple, la commande suivante modifiera le nombre maximal de fichiers ouverts à 2048 :

ulimit -u 2048

Vous pouvez également modifier les limites de ressources pour un processus spécifique en utilisant l’option -p suivie de l’ID du processus. Par exemple, la commande suivante modifiera le nombre maximal de fichiers ouverts pour le processus ID 12345 à 1024 :

ulimit -p -n 1024 12345

Afficher la limite actuelle de fichiers ouverts sous Linux

/proc/sys/fs/file-max

Les informations du système de fichiers sont stockés dans le système de fichiers virtuel proc (procfs).
On trouve notamment le fichier file-max qui indique la limite du nombre de fichiers ouverts.

Pour obtenir la limite de fichiers ouverts sur n’importe quel serveur Linux, exécutez la commande suivante :

cat /proc/sys/fs/file-max
65535

Le nombre ci-dessus indique que l’utilisateur peut ouvrir ‘65535’ fichiers par session de connexion.

Sur Ubuntu :

cat /proc/sys/fs/file-max
9223372036854775807

Cela indique clairement que chaque système d’exploitation Linux a un nombre différent de fichiers ouverts. Cela dépend des dépendances et des applications qui tournent dans les systèmes respectifs.

La commande ulimit

La commande ulimit de Linux permet de définir ou d’afficher les limites de ressources pour l’utilisateur actuel ou un processus spécifique. Les limites de ressources définissent la quantité maximale de ressources système qu’un utilisateur ou un processus peut consommer. Cela permet d’éviter qu’un processus trop gourmand ne consomme toutes les ressources du système et ne le fasse tomber en panne.

Pour afficher la configuration complète de l’utilisation, utilisez la commande ulimit avec l’option -a :

ulimit -a

Voici la configuration de l’ut

real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 125370
max locked memory (kbytes, -l) 4021400
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 125370
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Voici les détails de la sortie de la commande ulimit -a :

  • Max open files / Nombre maximal de fichiers ouverts : Cette limite spécifie le nombre maximum de fichiers qu’un processus peut ouvrir
  • Max user processes / Nombre maximal de processus utilisateur : Cette limite indique le nombre maximal de processus qu’un utilisateur peut exécuter simultanément
  • Max core file size / Taille maximale des fichiers centraux : Cette limite indique la taille maximale d’un fichier de base qui peut être créé lorsqu’un processus se bloque
  • Max memory usage / Utilisation maximale de la mémoire : Cette limite indique la quantité maximale de mémoire qu’un processus peut utiliser
  • Max locked memory (Mémoire bloquée maximale) : Cette limite indique la quantité maximale de mémoire qu’un processus peut verrouiller en mémoire
  • Max data seg size / Taille maximale du segment de données : Cette limite indique la taille maximale d’un segment de données qu’un processus peut créer
  • Max stack size / Taille maximale de la pile : Cette limite indique la taille maximale de la pile qu’un processus peut créer

Comme vous pouvez le voir, la commande retourne les paramètres que l’on peut utiliser pour filtrer la configuration.
Ainsi :

  • ulimit -n — Affiche la limite du nombre de fichiers ouverts
  • ulimit -c — Affiche la taille du fichier principal
  • ulimit -u — Affiche la limite maximale de processus pour l’utilisateur connecté
  • ulimit -f — Affiche la taille maximale des fichiers que l’utilisateur peut avoir
  • umilit -m — Affiche la taille maximale de la mémoire pour l’utilisateur connecté
  • ulimit -v — Affiche la taille maximale de la mémoire

Utilisez les commandes suivantes pour vérifier les limites dures et souples du nombre de fichiers ouverts pour l’utilisateur connecté.

ulimit -Hn
1048576

Enfin pour afficher le nombre de fichiers ouverts par l’utilisateur, utilisez la commande lsof comme ceci :

lsof -u <identifiant_utilisateur> | wc -l