Ich versuche, das Limit für geöffnete Dateien sowohl für Root-Benutzer als auch für Nicht-Root-Benutzer über zu erhöhen /etc/security/limits.conf
. Aber ich komme nicht darüber hinweg 999999
, alles über diesem Wert wird auf den Standardwert zurückgesetzt 1024
, und ich kann es auch nicht auf unbegrenzt setzen.
Hier ist meinlimits.conf
* hard nofile 999999
* hard nofile 999999
root hard nofile 999999
root soft nofile 999999
Das Obige funktioniert einwandfrei und ulimit -n
gibt zurück 999999
.
Aber wenn ich den Wert einen Schritt höher oder auf unlimited
oder -1
oder mache infinity
, funktioniert es nicht. ulimit -n
return1024
Ich habe hierauf verwiesen:limits.conf – Konfigurationsdatei für das Modul pam_limits | Ubuntu-Manpage
Danke
Antwort1
Ich weiß, dass es 10 Monate zu spät ist, aber Sie haben das harte Limit zweimal für alle Benutzer festgelegt. Ändern Sie die zweite Zeile in ein weiches ulimit.
* hard nofile 999999
* soft nofile 999999
root hard nofile 999999
root soft nofile 999999
Danach sollten Sie Folgendes sehen:
$ ulimit -n
999999
$
Ihre Datei hätte für Root immer funktionieren sollen, da die Grenzwerte korrekt definiert waren.
Außerdem können Sie nicht -1, unendlich, unbegrenzt oder ähnliches verwenden, Sie müssen einen Literalwert verwenden. Der maximal unterstützte Wert hierfür ist im Kernel definiert und wird in /proc/sys/fs/nr_open angezeigt. In meinen CentOS 7- und Debian-Strech-Umgebungen erhalte ich denselben Wert:
$ cat /proc/sys/fs/nr_open
1048576
$
Sie müssen außerdem eine neue Sitzung starten, damit die Limits aktualisiert werden.
Antwort2
Damit dies funktioniert, müssen drei Dateien geändert werden:
/etc/security/limits.conf
/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive
In der ersten Datei haben Sie die benötigten Zeilen bereits eingefügt, in den beiden anderen Dateien wird dann noch diese Zeile benötigt:
session required pam_limits.so
Bitte beachten Sie:
Was die meisten Ressourcen nicht betonen, ist, dass Ihre Grenzwerte ganz einfach von allem geändert werden können, was für die Ausführung Ihrer Prozesse verantwortlich ist. Wenn ulimit -n (als korrekter Benutzer ausführen) Ihnen die gerade festgelegte Zahl liefert, cat /proc/{process_id}/limits aber immer noch die niedrige Zahl ausgibt, haben Sie mit ziemlicher Sicherheit einen Prozessmanager, ein Init-Skript oder etwas Ähnliches, das Ihre Grenzwerte durcheinander bringt. Sie müssen auch bedenken, dass Prozesse die Grenzwerte des übergeordneten Prozesses erben.
Wenn ein solcher Prozess vorhanden ist, müssen Sie daher die Konfigurationsdatei ändern, damit er funktioniert.
Quelle: https://underyx.me/2015/05/18/erhöht-die-maximale-anzahl-von-dateideskriptoren