Warum kann es nicht über 4096 maximal geöffnete Dateien für Nicht-Root-Benutzer hinausgehen?

13

Ich kann das nofileLimit für Nicht-Root-Benutzer unter Ubuntu 14.04 anscheinend nicht erhöhen , obwohl ich jeder StackExchange-Antwort zu diesem Problem folge. Bisher habe ich:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

$ cat /proc/sys/fs/file-max
101232

Neu gestartet, angemeldet und:

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

Es scheint immer noch irgendwie ein Limit von maximal 4096 für Nicht-Root-Benutzer zu geben.

Koffein-Koma
quelle
Ich habe genau das gleiche Problem auf Ubuntu 16.10 Desktop. Egal was ich versuche, die Grenzen sind entweder 1024 oder 4096.
NathanAldenSr

Antworten:

13

Mit Ubuntu 14.04 habe ich das beschriebene Hard Limit erreicht:

user@notebook:~$ ulimit -Hn 4096  

Ich könnte es mit ulimit senken, aber nicht erhöhen, so wie es die Frage beschreibt. Wie im Handbuch von ulimit beschrieben:

Nur Root kann das harte Limit erhöhen

Also habe ich versucht, ein höheres Limit /etc/security/limits.confwie folgt festzulegen :

user hard nofile 9999 

und ein ssh localhost -l userneues Login wie gab mir das neue Limit:

user@notebook:~$ ulimit -Hn 9999

Hoffe das funktioniert auch bei dir.

TomTomTom
quelle
Vielen Dank, TomTomTom. Ich habe bereits eine solche Änderung in /etc/security/limits.d/custom.conf. Ich habe versucht, es direkt in /etc/security/limits.conf zu platzieren, wie Sie vorgeschlagen haben, und ich erhalte immer noch "bash: ulimit: Dateien öffnen: Limit kann nicht geändert werden: Operation nicht erlaubt".
Koffein Koma
Ich - raten Sie mal - einer von zwei Gründen, warum es bei Ihnen nicht funktioniert:
TomTomTom
1
Ich habe zu lange gebraucht, um den unvollständigen Kommentar zu bearbeiten. Los geht's: Ich - raten Sie mal - einer von zwei Gründen, warum dies bei Ihnen nicht funktioniert: 1. /etc/security/limits*Wird von Ihrem Anmeldemechanismus nicht gelesen - aus noch unbekannten Gründen. 2. Ihr hartes Limit wird an anderer Stelle auf 4096 festgelegt und "nur root kann sich erhöhen ...". Sie können Ihre Profile wie .bashrc(abhängig von Ihrer Shell) überprüfen oder /etcnach anderen Stellen suchen, an denen Grenzwerte festgelegt werden können, wie z find /etc | grep -e ulimit -e 4096 -e nofile. Übrigens: Hast du es mit ssh versucht? Und: Haben Sie sich /etc/ssh/sshd.confaus irgendeinem Grund geändert , um PAM zu vermeiden?
TomTomTom
Ja, alle Anmeldungen erfolgen über ssh. Ich habe UsePAM deaktiviert. Einige Anleitungen empfehlen dies, um nur SSH-Schlüssel-basierte Anmeldungen zuzulassen. Ich werde versuchen, es vorübergehend einzuschalten, nur um zu sehen, ob das das Problem ist. Vielen Dank!
Koffein Koma
Afaik, PAM sollte gelesen werden /etc/security/limits*- Sie könnten versuchen, PAM zu aktivieren, um dies zu überprüfen. Ich werde versuchen, PAM zu deaktivieren, um zu sehen, welchen Unterschied es macht, und die Ergebnisse melden. --- Ja! das ist es! Bei deaktiviertem PAM liegt mein Limit ebenfalls bei 4096, obwohl es auf 9999 Zoll eingestellt ist /etc/security/limits.conf.
TomTomTom
4

Ich denke, dieser Artikel befasst sich mit Ihrem Problem.

Grundsätzlich sollten Sie den Befehl ulimit verwenden, um die verfügbaren Ressourcen zu erhöhen.

Zum Beispiel:

Verwenden Sie den folgenden Befehl, um die maximale Anzahl geöffneter Dateideskriptoren anzuzeigen:

cat /proc/sys/fs/file-max

Geben Sie den folgenden Befehl ein, um die harten und weichen Werte anzuzeigen:

# ulimit -Hn
# ulimit -Sn

Geben Sie den folgenden Befehl ein, um die Hard- und Soft-Werte für httpd- oder Oracle-Benutzer anzuzeigen:

# su - username

Um die Anzahl der maximalen Dateien festzulegen, können Sie die maximale Anzahl geöffneter Dateien erhöhen, indem Sie einen neuen Wert in der Kernelvariablen / proc / sys / fs / file-max wie folgt festlegen (als Root anmelden):

# sysctl -w fs.file-max=100000

Der obige Befehl erzwingt das Limit auf 100000 Dateien. Sie müssen die /etc/sysctl.confDatei bearbeiten und die folgende Zeile einfügen, damit die Einstellung nach dem Neustart unverändert bleibt. Fügen Sie dazu eine Konfigurationsanweisung wie folgt hinzu:

fs.file-max = 100000

Speichern und schließen Sie die Datei. Benutzer müssen sich abmelden und erneut anmelden, damit Änderungen wirksam werden, oder einfach den folgenden Befehl eingeben:

# sysctl -p

Überprüfen Sie Ihre Einstellungen mit dem Befehl:

# cat /proc/sys/fs/file-max

oder:

# sysctl fs.file-max

Mit dem obigen Verfahren werden systemweite FD-Grenzwerte httpd( File Descriptors) festgelegt. Sie können den Benutzer (oder einen anderen Benutzer) jedoch auf bestimmte Grenzwerte beschränken, indem Sie die /etc/security/limits.confDatei durch Bearbeiten bearbeiten /etc/security/limits.confund die Grenzwerte wie folgt festlegen:

httpd soft nofile 4096
httpd hard nofile 10240

Dann überprüfen Sie sie durch:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Wenn Sie das Problem bei anderen Linux-Distributionen haben, überprüfen Sie das /etc/pam.d/loginund stellen Sie sicher, dass Sie pam_limits.soaktiviert sind, z

session required pam_limits.so
Brooke Fogg-Wolfe
quelle
2
Hallo Brooke. Leider habe ich die Vorschläge aus diesem Artikel bereits ausprobiert. Obwohl das 'ulimit -Hn' für mich neu war; es druckt 4096, die Grenze, an die ich immer wieder stoße.
Koffein Koma
0

Wenn es sich um einen Dienst handelt, können Sie versuchen, das Limit in /etc/systemd/system/{ServiceName}.serviceadd festzulegenLimitNOFILE=65536

Maicon Santana
quelle
Ubuntu 14.04 verwendet standardmäßig nicht systemd.
Nummer 5
Ubuntu 16.04, Tomcat 8 arbeitete für mich
Arjang