Comment augmenter le nombre maximum de fichiers ouverts? (Debian / Ubuntu)

debian

J’ai récemment eu une petite mésaventure avec une limitation méconnue de Debian ou de Ubuntu
En effet ces sytèmes sont par défaut limités en nombre de fichiers ouvert en simultanés
Si vous souhaitez ouvrir 10000 fichiers en même temps, cela bloquera avant la plupart du temps

Comment augmenter le nombre maximum de fichiers ouverts sur Debian?
Par défaut la limite sur Debian est fixée à 1024 fichiers ouverts en simultanés au maximum
Il faut donc utiliser quelques astuces pour en ouvrir plus
La commande ulimit devrait suffir la plupart du temps, mais pas toujours

Nous allons donc voir dans cet article les quelques options utiles de la commande ulimit, ainsi que d’autres configurations à modification pour fixer votre propre limite sans avoir besoin de ulimit

La limite par défaut sur Debian

Bien, la première chose à savoir c’est que la limite par défaut est de 1024
C’est à dire que vous pouvez avoir jusqu’a 1024 fichiers ouverts en simultanés, pas plus
Si vous créer un script qui doit modifier 10000 fichiers en même temps (c’est à dire sans les ouvrir/fermer à chaque écriture), vous serez rapidement bloqué, et seulement les 1000 premiers environs seront mis à jour

Cette limite peut être affichée avec la commande suivante:

La commande ulimit permet entre autres d’afficher la limite actuelle
Nous verrons dans le paragraphe suivant qu’il y a d’autres options intéressantes

Enfin pour en finir avec la théorie, vous devez aussi savoir qu’il existe en réalité deux limites sur les sytèmes Linux:

  • Une limite « soft »: qui correspond à la valeur courante fixée par l’utilisateur, et qui peut être modifiée au début de chaque script (nous verrons plus tard comment)
  • Une limite « hard »: qui correspond à valeur maximale que l’utilisateur pourra demander

C’est à dire que si votre limite soft est à 1024 et votre limite hard à 5000
Vous pourrez essayez de changer la limite temporairement à 10000 mais ca ne fonctionnera pas
Si vous avez besoin de faire quelque chose comme ca, nous verrons par la suite comment augmenter ces deux limites

La commande ulimit

Je vous ai déjà montré un exemple de ce que la commande ulimit permet de faire juste avant
Il s’agit en fait d’une commande qui permet de connaître de de définir les limites du sytème pour le process en cours (un script par exemple)

Afficher la limite actuelle

Je vous ai déjà plus ou moins donné cette commande
A savoir qu’il existe des variantes pour connaitre les limites soft et hard:

Comme vous l’aurez deviner, S implique la limite « Soft », et H la limite « Hard »

Modifier la limite

Le moyen le plus simple pour modifier la limite temporairement est d’utiliser cette commande:

Cela vous permettra en théorie de pouvoir ouvrir jusqu’a 10000 fichiers en même temps
Mais ce n’est pas très fiable

Je vous parlais d’une mésaventure en introduction et c’est exactement l’erreur que j’ai faite
J’avais un script qui devait modifier 60000 fichiers en même temps, pour des raisons de performance je n’ouvrais/fermait pas le fichier à chaque écriture
J’ouvrais tout au début, écrivait ce qu’il me fallait durant le script, et refermait à la fin

Seulement je me suis rendu compte bien trop tard que souvent cela ne fonctionnait pas, et que j’avais en général seulement 1% des fichiers qui étaient correctement modifiés
Si c’est votre cas, qu’il ne s’agit pas d’un changement temporaire sous vos yeux, mais d’un process qui va tourner en automatique par la suite, je vous conseille donc plutôt d’appliquer les modifications proposées dans le chapitre suivant

Fixer votre propre limite de manière permanente

Pour plus de fiabilité et de simplicité il est possible d’inscrire votre limite dans la configuration de votre système, et elle sera ainsi toujours valable

Pour cela, vous devez suivre la procédure suivante :

  • Modifier le fichier /etc/security/limits.conf
  • Coller les lignes suivantes (ou modifier les si déjà présentes):

    J’ai indiqué une limite globale à 100k, à vous d’adapter suivant vos besoins
  • Modifier le fichier /etc/pam.d/common-session
  • Ajouter la ligne suivante:
  • Modifier le fichier /etc/pam.d/common-session-noninteractive
  • Ajouter la ligne suivante:
  • Redémarrer ensuite votre ordinateur ou votre serveur

Après le redémarrage, les nouvelles limites seront appliquées directement, l’usage de la commande ulimit ne sera plus indispensable

Autres commandes utiles

Si vous voulez vous assurer qu’un processus tourne bien avec la limite que vous lui avez imposé, il est possible de surveiller cela

Tout d’abord vous devez trouvez le PID de votre programme, par exemple avec la commande suivante:

Le PID est le numéro indiqué dans la deuxième colonne du résultat affiché
Voici un exemple:

Mon PID par la suite sera donc le 872

Afin de vérifier les limites actives, j’utilise la commande suivante :

Pensez à remplacer 872 par votre propre PID
Le tableau affiché vous indique toutes les limites appliquées au processus
Dans mon cas je peux voir que le « max open files » (nombres maximum de fichiers ouverts en simultanés) est à 16364 sur les deux limites (soft et hard)

Cela vous permet de vérifier que le nombre est bien celui désiré

Conclusion

Vous savez maintenant comment connaître et ajuster le nombre maximum de fichiers ouverts en simultané sur un système Linux type Debian ou Ubuntu
J’espère que cet article vous aura aidé, car j’ai eu du mal à trouver certaines de ces infos, c’est pourquoi j’ai décidé de tout résumer ici

Je sais que j’ai eu plusieurs fois affaire à cette limite fourbe qui n’est pas forcément quelque chose auquel on pense facilement, mais qui peut créer pas mal de problèmes
Après j’avoue en avoir eu besoin sur des scripts très spécifiques, la plupart du temps ca ne devrait pas poser de problèmes

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.