Une autre possibilité est trop de threads. Nous venons de rencontrer ce message d'erreur lors de l'exécution d'un harnais de test sur une application qui utilise un pool de threads. Nous avons utilisé
watch -n 5 -d "ps -eL <java_pid> | wc -l"
pour surveiller le nombre continu de threads natifs Linux exécutés dans l'ID de processus Java donné. Après ce coup d'environ 1 000 (pour nous - YMMV), nous avons commencé à recevoir le message d'erreur que vous mentionnez.
Ceci est généralement causé par le manque de descripteurs de fichiers.
Il y a la limite totale des descripteurs de fichiers du système, qu'obtenez-vous de la commande :
sysctl fs.file-nr
Cela renvoie le nombre de descripteurs de fichiers :
<in_use> <unused_but_allocated> <maximum>
Pour connaître la limite de descripteur de fichier d'un utilisateur, exécutez les commandes :
sudo su - <username>
ulimit -Hn
Pour savoir combien de descripteurs de fichiers sont utilisés par un utilisateur, exécutez la commande :
sudo lsof -u <username> 2>/dev/null | wc -l
Alors maintenant, si vous rencontrez un problème de limite de descripteur de fichier système, vous devrez modifier votre fichier /etc/sysctl.conf et ajouter, ou le modifier s'il existe déjà, une ligne avec fs.file-max et la définir sur une valeur large assez pour gérer le nombre de descripteurs de fichiers dont vous avez besoin et redémarrer.
fs.file-max = 204708