Ogni processo parte con 0 (stdin), 1 (stdout) e 2 (stderr). Ogni altro file aperto e ogni connessione di rete occupa un descriptor in più, quindi un web server o un proxy con molte connessioni simultanee ne usa molti.
Il limite per processo è spesso 1024. Quando viene raggiunto, le nuove connessioni falliscono con Too many open files. Per i servizi sotto systemd non vale l'ulimit della shell ma LimitNOFILE= nella unit.
Se il numero di descriptor aperti di un processo cresce sempre, sospetta un leak. Anche file di log cancellati ma ancora aperti continuano a occupare spazio; lsof +L1 li trova.
Esempio
ls /proc/$(pgrep -o nginx)/fd | wc -l