In realtà non sono gli handle di file aperti che sono esauriti, ma gli orologi inotify.
Puoi vederlo nel messaggio di errore:
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
Per risolvere il problema, è necessario aumentare il numero di inotify watch disponibili nel sistema. Se controlli effettivamente, scoprirai che ha un valore ridicolmente basso come 8192.
$ sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 8192
Puoi impostare il sysctl fs.inotify.max_user_watches
a un valore più alto in modo persistente modificando /etc/sysctl.conf
o creando un file nel /etc/sysctl.d
directory. Ad esempio, il mio sistema ha:
$ cat /etc/sysctl.d/10-user-watches.conf
fs.inotify.max_user_watches = 1048576
E poi caricalo con sysctl -p
.
Potresti non voler andare direttamente a quel numero e fare in modo che il kernel allochi memoria per tenere traccia di un milione di slot di controllo dei file utente; invece, prendi semplicemente il valore corrente e raddoppialo finché il problema non smette di verificarsi.