Ve skutečnosti to nejsou otevřené popisovače souborů, které došly, ale inotify watches.
Můžete to vidět v chybové zprávě:
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
Chcete-li problém vyřešit, musíte zvýšit počet hodinek inotify, které má systém k dispozici. Pokud to skutečně zkontrolujete, zjistíte, že má nějakou směšně nízkou hodnotu, například 8192.
$ sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 8192
Můžete nastavit sysctl fs.inotify.max_user_watches
na vyšší hodnotu trvale úpravou /etc/sysctl.conf
nebo vytvořením souboru v /etc/sysctl.d
adresář. Můj systém má například:
$ cat /etc/sysctl.d/10-user-watches.conf
fs.inotify.max_user_watches = 1048576
A poté jej načtěte pomocí sysctl -p
.
Možná nebudete chtít jít přímo k tomuto číslu a způsobit, že jádro alokuje paměť pro sledování milionu uživatelských slotů pro sledování souborů; místo toho prostě vezměte aktuální hodnotu a zdvojnásobte ji, dokud se problém nepřestane vyskytovat.