CentOS + Tomcat + beaucoup d'ouvertures de fichiers = java.net.SocketException: Too many open files
Tout 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 :
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 :...
fs.file-max = 64000
...
ouuser - nofile 8192
La première colonne désigne l'utilisateur ou le groupe (grâce à @) ou encore n'importe qui grâce à *.@group - nofile 8192
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é :
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.@tomcat - nofile 8192
optitime - nofile 8192
Voilà, en espérant que ça puisse aider et surtout m'éviter de rechercher cette information à nouveau !