CentOS + Tomcat + beaucoup d'ouvertures de fichiers = java.net.SocketException: Too many open files

ExceptionTout est dans le titre !!! Comme d'habitude, c'est plus un pense-bête qu'un véritable article ... si ça peut aider ...

J'ai eu une surprise ce matin sur un serveur client de constater cette erreur :

java.net.SocketException: Too many open files


C'est un serveur sous CentOS 5.5 hébergeant un serveur MySQL, un serveur tomcat avec plusieurs Webapps, un serveur Apache et enfin un serveur propriétaire qui utilise pas mal de socket et a une base de donnée en interne ...

Cocktail génial pour visiblement dépasser la limite par défaut du système s'élevant à 1024 que l'on obtient en faisant un :

ulimit -n

Il y a 2 valeurs possibles à modifier, celle présente dans le fichier /proc/sys/fs/file-max par défaut, celle-ci est assez élevée (plus de 64000). Au besoin il faut modifier la ligne suivante :

...

fs.file-max = 64000

...

Si (comme tel était mon cas) la valeur de ce fichier est plus élevée, il reste à ajouter une entrée au fichier /etc/security/limits.conf :

user         -          nofile          8192

ou

@group         -          nofile          8192

La première colonne désigne l'utilisateur ou le groupe (grâce à @) ou encore n'importe qui grâce à *.
La seconde colonne, on détermine si la limite est soft ou hard, ou les 2 grâce à -.
La troisième colonne indique sur quel paramètre cette configuration s'exécute, ici nofile correspond au paramètre open files retourné par ulimit.
Enfin la dernière colonne indique la valeur.
Dans mon cas, j'ai rajouté :

@tomcat         -          nofile          8192
optitime           -          nofile          8192

Il est indiqué sur la documentation Red Hat de redémarrer le serveur pour que cela prenne effet. La solution peut consister à relancer le ou les services concernés ainsi que les sessions utilisateurs.

Voilà, en espérant que ça puisse aider et surtout m'éviter de rechercher cette information à nouveau ;) !
Vus : 1999
Publié par Slobberbone : 81