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!
/etc/security/limits.conf
möglicherweise abmelden und wieder anmelden müssen, bevor Sie das neue maximale Limit verwenden können. Ich tat dies und war verblüfftulimit -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.Antworten:
Der
ulimit
Befehl ä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
ulimit
zuulimit -S
, so wird standardmäßig die weichen Grenzen die ganze Zeit.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.
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:quelle
/etc/pam.d/common-session*
und gerade bearbeitetcommon-session
, und selbst nach einem Neustart hat es nicht funktioniert. Nachdem Sie jedoch dieselbe Zeile (fürpam_limits.so
) hinzugefügt habencommon-session-noninteractive
,ulimit -n
wird der neue Wert nach einer erneuten Anmeldung angezeigt (kein Neustart erforderlich). FWIW Ich habe versucht, das Limit für root (nur) zu ändern.Wenn Sie pro Benutzer weiche und harte Limits verwenden, können Sie Folgendes verwenden:
um zu überprüfen, ob Ihre Einstellungen für diesen bestimmten Benutzer funktionieren oder nicht.
quelle
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.
quelle
$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024