Ich vermute, dass der Hauptgrund für das Limit darin besteht, übermäßigen Speicherverbrauch zu vermeiden (jeder offene Dateideskriptor verwendet Kernelspeicher). Es dient auch als Schutz vor fehlerhaften Anwendungen, die Dateideskriptoren preisgeben und Systemressourcen verbrauchen.
Aber wenn man bedenkt, wie absurd viel RAM moderne Systeme im Vergleich zu Systemen vor 10 Jahren haben, denke ich, dass die Standardwerte heute ziemlich niedrig sind.
Im Jahr 2011 wurde das standardmäßige harte Limit für Dateideskriptoren unter Linux von 1024 auf 4096 erhöht.
Einige Software (z. B. MongoDB) verwendet viel mehr Dateideskriptoren als das Standardlimit. Die Leute von MongoDB empfehlen, dieses Limit auf 64.000 zu erhöhen. Ich habe einen rlimit_nofile
verwendet von 300.000 für bestimmte Anwendungen.
Solange Sie das Soft-Limit auf dem Standardwert (1024) belassen, ist es wahrscheinlich ziemlich sicher, das Hard-Limit zu erhöhen. Programme müssen setrlimit()
aufrufen um ihr Limit über das Soft-Limit zu erhöhen, und sind immer noch durch das Hard-Limit begrenzt.
Siehe auch einige verwandte Fragen:
- https://serverfault.com/questions/356962/where-are-the-default-ulimit-values-set-linux-centos
- https://serverfault.com/questions/773609/how-do-ulimit-settings-impact-linux
Die Auswirkung wäre normalerweise nicht beobachtbar, aber das IO-Modul des Kernels muss sich um all diese offenen Dateideskriptoren kümmern, und sie könnten auch einen Einfluss auf die Cache-Effizienz haben.
Solche Begrenzungen haben den Vorteil, dass sie den Benutzer vor eigenen (oder fremden) Fehlern schützen. Wenn Sie beispielsweise ein kleines Programm oder Skript ausführen, das sich auf unbestimmte Zeit verzweigt, wird es schließlich auf einem der ulimit
blockieren s und verhindern so ein intensiveres (möglicherweise nicht behebbares) Einfrieren des Computers.
Sofern Sie keine genauen Gründe haben, diese Grenzwerte zu erhöhen, sollten Sie dies vermeiden und besser schlafen.
Es ist technisch auf den maximalen Wert von unsigned long (C Lang) begrenzt, d. h. 4.294.967.295
Referenz :fs.h
Datei
/* 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 */
};