ulimit beheben: Dateien öffnen: Limit kann nicht geändert werden: Vorgang nicht zulässig

ulimit beheben: Dateien öffnen: Limit kann nicht geändert werden: Vorgang nicht zulässig

Ich habe dies auf verschiedenen GNU/Linux-Installationen getestet:

perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'

System A und D

Das erste Limit, das ich erreiche, liegt bei 1024. Es lässt sich leicht erhöhen, indem man Folgendes in /etc/security/limits.conf einträgt:

*                hard    nofile          1048576

und führen Sie dann aus:

ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max

Nun geht der Test bis 1048576.

Allerdings scheint es, dass ich den Wert nicht über 1048576 erhöhen kann. Wenn ich 1048577 in limits.conf eingebe, wird er einfach ignoriert.

Was ist die Ursache dafür?

System B

Auf dem System BI kommt man nicht einmal bis 1048576:

echo 99999999 | sudo tee /proc/sys/fs/file-max

/etc/security/limits.conf:

*                hard    nofile          1048576

Hier bekomme ich:

$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK

Woher kommt diese Grenze?

System C

Dieses System hat auch die Grenze von 1048576 in limits.conf und 99999999 in /proc/sys/fs/file-max.

Aber hier liegt die Grenze bei 4096:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK

Wie erhöhe ich das auf (mindestens) 1048576?

(Notiz an mich selbst: Nicht tun echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max:)

Antwort1

Prüfen Sie, ob Folgendes /etc/ssh/sshd_configenthalten ist:

UsePAM=yes

und das /etc/pam.d/sshdenthält:

session    required   pam_limits.so

Im folgenden Kommentar gibt @venimus an, dass das 1M-Limit fest codiert ist:

Der Kernel 2.6.x-Quellcode lautet ./fs/file.c:30:int sysctl_nr_open __read_mostly = 1024*1024; das ist 1048676

Die 1048576 sind pro Prozess. Durch mehrere Prozesse kann diese Grenze also überwunden werden.

verwandte Informationen