Ce ne sont pas réellement les descripteurs de fichiers ouverts qui sont épuisés, mais les montres inotify.
Vous pouvez le voir dans le message d'erreur :
Sep 13 05:32:22 pars.work systemd[1]: Failed to set a watch for nginx.service's PID file /var/run/nginx.pid: Too many open files
Pour résoudre le problème, vous devez augmenter le nombre de montres inotify dont dispose le système. Si vous vérifiez réellement, vous constaterez qu'il a une valeur ridiculement basse comme 8192.
$ sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 8192
Vous pouvez définir le sysctl fs.inotify.max_user_watches
à une valeur supérieure de manière persistante en modifiant /etc/sysctl.conf
ou créer un fichier dans le /etc/sysctl.d
annuaire. Par exemple, mon système a :
$ cat /etc/sysctl.d/10-user-watches.conf
fs.inotify.max_user_watches = 1048576
Et puis chargez-le avec sysctl -p
.
Vous ne voudrez peut-être pas aller directement à ce nombre et faire en sorte que le noyau alloue de la mémoire pour suivre un million d'emplacements de surveillance de fichiers utilisateur ; à la place, prenez simplement la valeur actuelle et doublez-la jusqu'à ce que le problème cesse de se produire.