Gibt es eine (technische oder praktische) Begrenzung, wie groß Sie die maximale Anzahl geöffneter Dateien unter Linux konfigurieren können? Gibt es einige nachteilige Auswirkungen, wenn Sie es auf eine sehr große Anzahl konfigurieren (z. B. 1-100M)?
Ich denke hier an die Servernutzung, nicht an eingebettete Systeme. Programme, die große Mengen offener Dateien verwenden, können natürlich Speicher verbrauchen und langsam sein, aber ich bin an nachteiligen Auswirkungen interessiert, wenn das Limit viel größer als erforderlich konfiguriert ist (z. B. Speicher, der nur von der Konfiguration belegt wird).
linux
files
limit
open-files
Sampo
quelle
quelle
Antworten:
Ich vermute, der Hauptgrund für das Limit ist die Vermeidung eines übermäßigen Speicherverbrauchs (jeder offene Dateideskriptor verwendet Kernelspeicher). Es dient auch als Schutz gegen fehlerhafte Anwendungen, bei denen Dateideskriptoren verloren gehen und Systemressourcen verbraucht werden.
Angesichts der absurden Menge an RAM, die moderne Systeme im Vergleich zu Systemen vor 10 Jahren haben, denke ich, dass die Standardeinstellungen heute recht niedrig sind.
Im Jahr 2011 wurde das Standardlimit für Dateideskriptoren unter Linux von 1024 auf 4096 erhöht .
Einige Software (z. B. MongoDB) verwendet viel mehr Dateideskriptoren als das Standardlimit. Die MongoDB-Leute empfehlen, diese Grenze auf 64.000 zu erhöhen . Ich habe eine
rlimit_nofile
von 300.000 für bestimmte Anwendungen verwendet.Solange Sie das Soft-Limit auf dem Standardwert (1024) halten, ist es wahrscheinlich ziemlich sicher, das Hard-Limit zu erhöhen. Programme müssen aufrufen
setrlimit()
, um ihr Limit über das weiche Limit zu erhöhen, und sind immer noch durch das harte Limit begrenzt.Siehe auch einige verwandte Fragen:
quelle
Die Auswirkungen sind normalerweise nicht zu beobachten, aber das E / A-Modul des Kernels muss sich um alle offenen Dateideskriptoren kümmern, und sie können sich auch auf die Cache-Effizienz auswirken.
Solche Beschränkungen haben den Vorteil, dass der Benutzer vor eigenen Fehlern (oder Fehlern Dritter) geschützt wird. Wenn Sie beispielsweise ein kleines Programm oder Skript ausführen, das sich auf unbestimmte Zeit verzweigt, blockiert es möglicherweise eines der
ulimit
s und verhindert so ein intensiveres (möglicherweise nicht behebbares) Einfrieren des Computers.Wenn Sie keine genauen Gründe haben, eine dieser Grenzen zu erhöhen, sollten Sie sie vermeiden und besser schlafen.
quelle
Es ist technisch auf den Maximalwert von unsigned long (C Lang) begrenzt, dh 4.294.967.295
Referenz:
fs.h
Dateiquelle
Ich denke, Ihr Anliegen ist verständlich, aber höchstwahrscheinlich wird Linux nicht viel Speicher für konfigurierte (aber nicht verwendete Dateideskriptoren) verbrauchen :)
Ich kann mich nicht an ein solches Problem in meiner beruflichen Laufbahn in den letzten 10 Jahren erinnern.
Grüße.
quelle
Ruhig spät, aber das sollte allen anderen helfen, die Antwort auf diese Frage zu bekommen. Die praktische Grenze für die Anzahl geöffneter Dateien unter Linux kann auch anhand der maximalen Anzahl von Dateideskriptoren gezählt werden, die ein Prozess öffnen kann.
Ich habe gesehen, wie Grenzen von System zu System geändert wurden. Auf der Manpage getlimit können Sie sehen, dass
RLIMIT_NOFILE-1
die Grenzwerte intern festgelegt werden.Um den Wert RLIMIT_NOFILE zu überprüfen, können Sie die folgende Anweisung verwenden, um ein Tupel abzurufen
python -c "import resource; print(resource.getrlimit(resource.RLIMIT_NOFILE))"
Das Tupel gibt die Ergebnisse als (Soflimit, Hardlimit) zurück. Für mich laufen die Ergebnisse auf mehreren Systemen wie folgt
Hinweis: 9223372036854775807 Diese Zahl bedeutet einfach unendlich. Sie werden immer andere Ressourcenlimits erreichen, bevor Sie dies erreichen. Wenn Sie das Hardlimit auf einem System über das hinaus geändert haben, was es ist, müssen Sie die Kernel-Parameter ändern.
quelle