Ich stelle fest, dass auf einem neuen CentOS-Image, das ich gerade von EC2 aus gebootet habe, der Standardwert für ulimit 1024 offene Dateien ist, aber / proc / sys / fs / file-max auf 761.408 festgelegt ist, und ich frage mich, wie diese beiden Grenzwerte funktionieren zusammen. Ich vermute, dass ulimit -n ein Benutzerlimit für die Anzahl der Dateideskriptoren ist, während / proc / sys / fs / file-max systemweit gilt. Wenn dies der Fall ist, sagen wir, ich habe mich zweimal als derselbe Benutzer angemeldet - hat jeder angemeldete Benutzer ein Limit von 1024 für die Anzahl der geöffneten Dateien oder ist es ein Limit von 1024 kombinierten geöffneten Dateien zwischen jedem dieser angemeldeten Benutzer? bei Usern?
Und hat das Festlegen der maximalen Dateideskriptoren auf einen sehr hohen Wert erhebliche Auswirkungen auf die Leistung, wenn Ihr System nicht immer sehr viele Dateien öffnet?
Antworten:
file-max
ist die maximale Anzahl von Dateideskriptoren (File Descriptors, FD), die auf Kernel-Ebene erzwungen wird und die nicht von allen Prozessen ohne Erhöhung überschritten werden kann. Dasulimit
wird auf einer Prozessebene erzwungen, die kleiner als das sein kannfile-max
.Es besteht kein Risiko für Leistungseinbußen durch Erhöhung
file-max
. In modernen Distributionen ist die maximale FD ziemlich hoch eingestellt, wohingegen in der Vergangenheit eine Neukompilierung und Änderung des Kernels erforderlich war, um die Zahl nach 1024 zu erhöhen. Eine systemweite Erhöhung würde ich nur durchführen, wenn Sie einen technischen Bedarf haben.Die Konfiguration pro Prozess muss häufig optimiert werden, um einen bestimmten Daemon zu bedienen, sei es eine Datenbank oder ein Webserver. Wenn Sie die Beschränkung vollständig aufheben, kann dieser Dämon möglicherweise alle verfügbaren Systemressourcen erschöpfen. Dies bedeutet, dass Sie das Problem nur durch Drücken der Reset-Taste oder durch Aus- und Wiedereinschalten beheben können. Beides führt wahrscheinlich zur Beschädigung aller geöffneten Dateien.
quelle
ulimit
Limit ist nicht pro Benutzer, sondern pro Prozess! Siehe unix.stackexchange.com/questions/55319/…Ich bin nicht sicher, ob ich die Bedeutung dieses Satzes vollständig verstehe (Englisch ist nicht meine Muttersprache). Wenn dieser Satz bedeutet, dass die ulimit-Konfiguration für Dateideskriptoren keine prozessbezogene Einschränkung darstellt, ist die akzeptierte Antwort (AFAIK) falsch.
Ich meine, wenn ein Benutzer 4 Prozesse gestartet hat und die ulimit-Konfiguration für FDs 1024 ist, kann jeder Prozess 1024 FDs öffnen. Der Benutzer ist nicht auf 1024 FDs beschränkt, sondern auf die Prozesse, die von diesem Benutzer gestartet werden.
Beispielsweise:
Hier ein Perl-Beispiel, bei dem wir das Limit erreichen (es ist ein Pro-Prozess-Limit):
Ergebnis:
1021, weil es 3 offene Dateideskriptoren gab, bevor die while-Schleife erreicht wurde (stdout, stdin und stderr)
Entschuldigung, wenn ich völlig falsch liege oder die Antwort falsch verstanden habe.
quelle