Wie erhöhe ich das Limit für geöffnete Dateien für einen Benutzer ohne Rootberechtigung?

144

Dies geschieht unter Ubuntu Release 12.04 (präzise) 64-Bit-Kernel Linux 3.2.0-25-virtual

Ich versuche, die Anzahl der für einen Benutzer zulässigen offenen Dateien zu erhöhen. Dies ist für meine Eclipse Java-Anwendung, bei der das aktuelle Limit von 1024 nicht ausreicht.

Nach den Beiträgen, die ich bisher gefunden habe, sollte ich in der Lage sein, Zeilen in zu setzen

/etc/security/limits.conf wie folgt:

soft nofile 4096
hard nofile 4096

um die Anzahl der geöffneten Dateien zu erhöhen, die für alle Benutzer zulässig sind.

Aber das funktioniert bei mir nicht und ich denke, das Problem hängt nicht mit dieser Datei zusammen.

Für alle Benutzer ist das Standardlimit 1024, unabhängig davon, was sich in /etc/security/limits.conf befindet. (Ich habe nach dem Ändern dieser Datei einen Neustart durchgeführt.)

$ ulimit -n
1024

Nun, trotz der Einträge in /etc/security/limits.conf kann ich das nicht erhöhen:

$ ulimit -n 2048

-bash: ulimit: open files: Limit kann nicht geändert werden : Operation nicht erlaubt Der seltsame Teil ist, dass ich das Limit nach unten , aber nicht nach oben ändern kann - sogar um zu einer Zahl zurückzukehren, die unter dem ursprünglichen Limit liegt:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

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

Als Root kann ich dieses Limit nach Belieben ändern, nach oben oder unten. Die angeblich systemweite Beschränkung in / proc / sys / fs / file-max scheint es nicht einmal zu interessieren

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

# ulimit -n 188898
# ulimit -n 
188898

Aber selbst wenn ich Eclipse als Root ausführen lasse, stürzt meine Anwendung aufgrund der Ausnahme "Too Many Open File" immer noch ab!

Bisher habe ich keine Möglichkeit gefunden, das Limit für geöffnete Dateien für einen Benutzer ohne Rootberechtigung zu erhöhen.

Wie soll ich das richtig machen? Ich habe mehrere andere Beiträge angeschaut, aber kein Glück!

iCode
quelle
6
Beachten Sie außerdem, dass Sie sich nach dem Bearbeiten /etc/security/limits.confmöglicherweise abmelden und wieder anmelden müssen, bevor Sie das neue maximale Limit verwenden können. Ich tat dies und war verblüfft ulimit -Hs, als ich noch 1000 zeigte, als ich es gerade auf 1000000 erhöht hatte! Dann loggte ich mich aus und wieder ein und ulimit zeigte den neuen Betrag an.
Cerin
Für GUI-Sitzungen finden Sie möglicherweise auch wichtige (Ubuntu 16+) diesen Thread .
Waldemar Wosiński

Antworten:

142

Der ulimitBefehl ändert standardmäßig die HARD-Grenzwerte, die Sie (ein Benutzer) senken, aber nicht erhöhen können.

Verwenden Sie die Option -S , um das SOFT- Limit zu ändern , das zwischen 0 und { HARD } liegen kann.

Ich habe tatsächlich aliased ulimitzu ulimit -S, so wird standardmäßig die weichen Grenzen die ganze Zeit.

alias ulimit='ulimit -S'

In Bezug auf Ihr Problem fehlt eine Spalte in Ihren Einträgen in /etc/security/limits.conf.

Es sollten VIER Spalten vorhanden sein, aber die erste fehlt in Ihrem Beispiel.

* soft nofile 4096
* hard nofile 4096

In der ersten Spalte wird beschrieben, für wen das Limit gelten soll. '*' ist ein Platzhalter für alle Benutzer. Um die Grenzen für root zu erhöhen , müssen Sie explizit 'root' anstelle von '*' eingeben.

Sie müssen außerdem /etc/pam.d/common-session*die folgende Zeile bearbeiten und am Ende hinzufügen:

session required pam_limits.so
Lornix
quelle
1
Wie ändere ich das Hard Limit für die maximale Anzahl offener Dateideskriptoren? Mein Problem ist, dass ich meiner Eclipse-Anwendung erlauben muss, so viele Dateien zu öffnen, wie sie will, aber das Limit von 4096 reicht nicht aus und ich möchte es auf so hoch wie möglich setzen, vielleicht 500000. Meine Einstellung in der limits.conf ist wie gesagt mit dem stern und trotzdem bewegt sich das hard limit nicht.
iCode
1
Nun, Sie haben festgestellt, dass der Wert von / proc / sys / fs / file-max 188.897 beträgt. Ich würde also sagen, dass Ihre Obergrenze zwischen 188.000 (erlaubt) und 500.000 (nicht erlaubt) liegt. Verwirrt den Verstand, dass Sie etwas haben, das gleichzeitig über 65000 offene Dateien erfordert. Beeindruckend. Normalerweise geht das mit Eisen um. Ich wäre misstrauisch gegenüber einer Programmierung, ähm, Missverständnissen. (Bei allem Respekt, bitte)
Lornix
4
das wars: session benötigt pam_limits.so, danke!
Lethalman
13
Zuerst habe ich den Platzhalter am Ende verpasst /etc/pam.d/common-session*und gerade bearbeitet common-session, und selbst nach einem Neustart hat es nicht funktioniert. Nachdem Sie jedoch dieselbe Zeile (für pam_limits.so) hinzugefügt haben common-session-noninteractive, ulimit -nwird der neue Wert nach einer erneuten Anmeldung angezeigt (kein Neustart erforderlich). FWIW Ich habe versucht, das Limit für root (nur) zu ändern.
Lambart
1
Überprüfen Sie auch, ob sich der Wert unterscheidet, wenn Sie als root angemeldet sind. superuser.com/questions/1200539/...
Robbo_UK
20

Wenn Sie pro Benutzer weiche und harte Limits verwenden, können Sie Folgendes verwenden:

su USER --shell /bin/bash --command "ulimit -n"

um zu überprüfen, ob Ihre Einstellungen für diesen bestimmten Benutzer funktionieren oder nicht.

Jeroen Teeuwen
quelle
5

Ich habe große Probleme damit, das zum Laufen zu bringen.

Mit dem folgenden Befehl können Sie es unabhängig von Ihrer Benutzerberechtigung aktualisieren.

sudo sysctl -w fs.inotify.max_user_watches=100000
Layke
quelle
4
Ich habe es versucht, da ich das gleiche Problem habe, aber es hat nicht funktioniert$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster