Augmenter le max open files

Un processus lancé sous Linux a une limite maximum de fichiers ouverts : en général c’est 1024. Parfois, certains processus manipulent beaucoup de fichiers et il est donc nécessaire d’augmenter cette limite.

Tout d’abord, voyons comment vérifier cette limite.

Dans un shell, on peut vérifier ce nombre :

$ ulimit -n
1024

Plus intéressant, on peut vérifier la limite d’un processus en fonctionnement :

# grep '^Max open files'  /proc/<pid>/limits
Max open files            2048                 2048                 files

Alors, comment modifier cette limite ?

Il faut bien avoir en tête que cette limite se change à la volée avec la commande ulimit. Tout processus lancé prendra la limite en cours dans le shell dans lequel il est lancé :

$ ulimit -n 512
$ <processus>

Néanmoins, on veut en général augmenter cette limite, et seul root peut augmenter cette limite.

Pour changer cette limite lors de l’identification d’un utilisateur via ssh, login, su, etc. on pourra utiliser le fichier /etc/security/limits.conf :

root                -       nofile          8192
jdoe                -       nofile          4096
*                   -       nofile          2048

Ainsi, lors du prochain login, un utilisateur « obtiendra » la limite indiquée.

Mais ATTENTION cela ne modifie PAS la limite des processus lancés au démarrage de la machine ! Cela peut être un vrai piège… Prenons un exemple concret : si j’augmente la limite du max open files à 8192 pour root via /etc/security/limits.conf j’ai donc cette valeur quand je me logue en root ! Si j’installe un logiciel qui se lance en daemon (ou si je redémarre un daemon déjà installé), celui se lancera  avec ma valeur courante soit 8192. MAIS si je redémarre ma machine, le logiciel se relancera cette fois avec la valeur 1024 ! J’espère que vous comprenez le piège que cela peut être !!

La meilleure solution sur un serveur destiné à lancer des daemons automatiquement (c’est souvent le cas sur un serveur 😀 )  est donc de positionner explicitement la limite avec la commande ulimit. Cela permet de positionner la bonne valeur au démarrage de la machine et pour chaque redémarrage du daemon. Sous Debian, on positionnera notamment ces valeurs dans les fichiers /etc/default/<daemon> :

# echo "ulimit -n 4096" >> /etc/default/tomcat6
# echo "ulimit -n 1337" >> /etc/default/ssh

One thought on “Augmenter le max open files

Comments are closed.