Größte zulässige maximale Anzahl geöffneter Dateien unter Linux


10

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).


Theoretisch könnten Sie berechnen, wie viele Dateideskriptoren Ihr System verarbeiten könnte, basierend auf dem verfügbaren Speicher und der Behauptung, dass jeder fd 1 KB Speicher verbraucht: serverfault.com/questions/330795/…
Alastair McCormack

Antworten:


10

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_nofilevon 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:


6
Dies hat die Frage jedoch nicht beantwortet, ob es eine technische oder praktische Grenze dafür gibt , wie hoch man die harte Grenze setzen kann . Es gibt, aber diese Antwort erwähnt es überhaupt nicht.
JdeBP

Ich finde es unmöglich, das Limit über 1 Million hinaus anzuheben. Ich denke, es könnte im Kernel fest codiert sein, weil ich trotz der Änderung vieler Konfigurationen nicht darüber hinaus erhöhen kann. superuser.com/questions/1468436/…
Pavel Komarov

3

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 ulimits 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.


2

Es ist technisch auf den Maximalwert von unsigned long (C Lang) begrenzt, dh 4.294.967.295

Referenz: fs.hDatei

/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
  unsigned long nr_files;   /* read only */
  unsigned long nr_free_files;  /* read only */
  unsigned long max_files;    /* tunable THIS IS OUR VALUE */
};

2
Haben Sie Referenzen dazu?
Tim

Auch das ist der höchste Wert für 32-Bit - signierte ganze Zahl, 32-Bit - Ganzzahl max - Wert ist 4294967295.
Sampo

Du hast recht, Sampo. Mein Fehler.
Leonard T

0

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.


0

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-1die 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

(1024, 1048576) # on UBUNTU linux 
(65536, 65536)  # on amazon linux 
(1024, 9223372036854775807) # on macos 

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.