Warum ist die Anzahl der geöffneten Dateien in Linux begrenzt?

Warum ist die Anzahl der geöffneten Dateien in Linux begrenzt?

Im Moment weiß ich, wie ich:

  • Limit für die Suche nach offenen Dateien pro Prozess:ulimit -n
  • Zähle alle von allen Prozessen geöffneten Dateien:lsof | wc -l
  • Maximal zulässige Anzahl geöffneter Dateien abrufen:cat /proc/sys/fs/file-max

Meine Frage lautet: Warum gibt es in Linux eine Begrenzung der Anzahl geöffneter Dateien?

Antwort1

Der Grund dafür ist, dass das Betriebssystem Speicher benötigt, um jede geöffnete Datei zu verwalten, und Speicher ist eine begrenzte Ressource – insbesondere auf eingebetteten Systemen.

Als Root-Benutzer können Sie die maximale Anzahl geöffneter Dateien pro Prozess (über ulimit -n) und pro System (z. B. echo 800000 > /proc/sys/fs/file-max) ändern.

Antwort2

Bitte beachten Sie, dass lsof | wc -ldadurch viele doppelte Einträge entstehen (gegabelte Prozesse können Dateihandles usw. gemeinsam nutzen). Diese Zahl könnte viel höher sein als das in festgelegte Limit /proc/sys/fs/file-max.

Um die aktuelle Anzahl der geöffneten Dateien aus Sicht des Linux-Kernels zu ermitteln, gehen Sie wie folgt vor:

cat /proc/sys/fs/file-nr

Beispiel: Dieser Server hat 40096 von maximal 65536 offenen Dateien, obwohl lsof eine viel größere Zahl meldet:

# cat /proc/sys/fs/file-max
65536
# cat /proc/sys/fs/file-nr 
40096   0       65536
# lsof | wc -l
521504

Antwort3

Ich denke, das hat größtenteils historische Gründe.

Ein Unix-Dateideskriptor ist ein kleiner intWert, der von Funktionen wie openund zurückgegeben creatund an read, write, close, usw. übergeben wird.

Zumindest in frühen Unix-Versionen war ein Dateideskriptor einfach ein Index in einem Array von Strukturen fester Größe pro Prozess, wobei jede Struktur Informationen über eine geöffnete Datei enthielt. Wenn ich mich recht erinnere, beschränkten einige frühe Systeme die Größe dieser Tabelle auf etwa 20.

Modernere Systeme haben höhere Grenzwerte, behalten aber größtenteils aus Trägheit das gleiche allgemeine Schema bei.

verwandte Informationen