Jeder Prozess startet mit 0 (stdin), 1 (stdout) und 2 (stderr). Jede weitere geöffnete Datei und jede Netzwerkverbindung belegt einen weiteren Deskriptor. Ein Webserver oder Proxy mit vielen gleichzeitigen Verbindungen braucht entsprechend viele.
Das Limit pro Prozess liegt oft bei 1024. Wird es erreicht, scheitern neue Verbindungen mit Too many open files. Für Dienste unter systemd gilt nicht ulimit aus der Shell, sondern LimitNOFILE= in der Unit.
Steigt die Zahl offener Deskriptoren eines Prozesses stetig, deutet das auf ein Leck hin. Auch gelöschte, aber noch geöffnete Logdateien belegen weiter Platz; lsof +L1 findet sie.
Beispiel
ls /proc/$(pgrep -o nginx)/fd | wc -l