Frage Wie kann ich das Limit für offene Dateien für einen Nicht-Root-Benutzer erhöhen?


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

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

Laut den Posts, die ich bisher gefunden habe, sollte ich in der Lage sein, Zeilen zu setzen

/etc/security/limits.conf so:

soft nofile 4096
hard nofile 4096

um die Anzahl der offenen Dateien zu erhöhen, die für alle Benutzer erlaubt sind.

Aber das funktioniert nicht für mich 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 (nach dem Ändern dieser Datei neu gestartet)

$ ulimit -n
1024

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

$ ulimit -n 2048

-bash: ulimit: Dateien öffnen: Limit kann nicht geändert werden: Operation nicht erlaubt Der komische Teil ist, dass ich das Limit ändern kann nach unten, kann sie aber nicht nach oben ändern - selbst um zu einer Zahl zurückzukehren, die unter der ursprünglichen Grenze 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 auf das ändern, was ich will, nach oben oder nach unten. Es scheint nicht einmal die vermeintlich systemweite Grenze in / proc / sys / fs / file-max 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 wegen der Ausnahme "Too Many Open File" ab!

Bisher habe ich keine Möglichkeit gefunden, das Limit für offene Dateien für einen Nicht-Root-Benutzer zu erhöhen.

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


121
2017-07-11 02:06


Ursprung


Beachten Sie auch, dass nach dem Bearbeiten /etc/security/limits.confMöglicherweise müssen Sie sich abmelden und dann wieder einsteigen, bevor Sie das neue Maximallimit verwenden können. Ich tat das und war verblüfft von ulimit -Hs zeige immer noch 1000 wenn ich es gerade auf 1000000 erhöht habe! Dann habe ich mich ab- und wieder eingeloggt, und ulimit hat die neue Menge angezeigt. - Cerin
Für die GUI-Sitzung können Sie auch wichtig finden (Ubuntu 16+) Dieser Thread. - Waldemar Wosiński


Antworten:


Das ulimit Befehl ändert standardmäßig die HARD-Grenzen, die Sie (ein Benutzer) senken können, aber nicht erhöhen können.

Benutze die -S Option zum Ändern der WEICH Grenze, die von 0 bis {HART}.

Ich habe tatsächlich Aliasing ulimit zu ulimit -S, so dass es immer die weichen Grenzen vorgibt.

alias ulimit='ulimit -S'

Was Ihr Problem betrifft, verpassen Sie eine Spalte in Ihren Einträgen in /etc/security/limits.conf.

Es sollte vier Spalten geben, aber die erste fehlt in Ihrem Beispiel.

* soft nofile 4096
* hard nofile 4096

Die erste Spalte beschreibt, für wen die Grenze gelten soll. '*' ist ein Platzhalter, also alle Benutzer. Um die Grenzen für zu erhöhen Wurzel, müssen Sie explizit 'root' anstelle von '*' eingeben.

Sie müssen auch bearbeiten /etc/pam.d/common-session* und füge am Ende die folgende Zeile hinzu:

session required pam_limits.so

120
2017-07-11 02:16



Wie ändere ich die Hard-Grenze für die maximale Anzahl von offenen Dateideskriptoren? Mein Problem ist, dass ich meiner Eclipse-Anwendung erlauben muss, so viele offene Dateien wie gewünscht zu haben, aber das Limit von 4096 ist nicht genug und ich möchte es so hoch wie möglich setzen, vielleicht 500000. Meine Einstellung in der limits.conf ist wie du erwähnt hast mit dem Stern und trotzdem bewegt sich das harte Limit nicht. - iCode
hast du dich dieses Mal abgemeldet? ulimit -a zeigt Ihnen alle Grenzen an, so dass Sie vergleichen können, ob sie sich geändert haben. - lornix
Nun, Sie haben entdeckt, dass der Wert von / proc / sys / fs / file-max 188.897 betrug ... Also würde ich sagen, Ihre obere Grenze liegt zwischen 188.000 (erlaubt) und 500.000 (nicht erlaubt). Bedenken Sie, dass Sie etwas haben, das über 65000 offene Dateien gleichzeitig benötigt. Beeindruckend. Normalerweise wird das auf einem großen Eisen gehandhabt. Ich wäre misstrauisch gegenüber einem Programm, äh, Missverständnis. (Bei allem Respekt, bitte) - lornix
Das war es: Session erforderlich pam_limits.so, danke! - lethalman
Zuerst habe ich die Wildcard am Ende verpasst /etc/pam.d/common-session* und gerade bearbeitet common-session, und selbst nach einem Neustart hat es nicht funktioniert. Aber nach dem Hinzufügen der gleichen Zeile (für pam_limits.so) zu common-session-noninteractive, ulimit -n Nach einer neuen Anmeldung wurde der neue Wert angezeigt (kein Neustart erforderlich). FWIW Ich habe versucht, das Limit für root (nur) zu ändern. - Lambart


Wenn Sie für einzelne Benutzer weiche und harte Grenzwerte verwenden, können Sie Folgendes verwenden:

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

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


15
2017-09-12 10:34





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

Wenn Sie Folgendes verwenden, können Sie es unabhängig von Ihren Benutzerberechtigungen aktualisieren.

sudo sysctl -w fs.inotify.max_user_watches=100000

4
2017-07-10 15:41



Ich habe das 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