Wie kann ich die Anzahl der geöffneten Dateien unter Linux ändern?

Wenn ich meine Anwendung ausführe, erhalte ich manchmal eine Fehlermeldung über "zu viele offene Dateien".

Das Ausführen von ulimit -a meldet, dass das Limit bei 1024 liegt. Wie kann ich das Limit über 1024 erhöhen?

Edit ulimit -n 2048 führt zu einem Berechtigungsfehler.

Lösung

Sie können immer versuchen, ein ulimit -n 2048 auszuführen. Dies setzt nur das Limit für Ihre aktuelle Shell zurück und die angegebene Zahl darf das harte Limit nicht überschreiten

Jedes Betriebssystem hat ein anderes hartes Limit, das in einer Konfigurationsdatei festgelegt ist. Zum Beispiel kann das harte Limit für offene Dateien unter Solaris beim Booten in /etc/system gesetzt werden.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

Unter OS X müssen die gleichen Daten in /etc/sysctl.conf gesetzt werden.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Unter Linux befinden sich diese Einstellungen oft in /etc/security/limits.conf.

Es gibt zwei Arten von Limits:

  • weiche Limits sind einfach die aktuell erzwungenen Limits
  • harte Limits markieren den Maximalwert, der durch das Setzen eines weichen Limits nicht überschritten werden kann

Weiche Limits können von jedem Benutzer gesetzt werden, während harte Limits nur von root geändert werden können. Limits sind eine Eigenschaft eines Prozesses. Sie werden vererbt, wenn ein Kindprozess erstellt wird, daher sollten systemweite Limits während der Systeminitialisierung in Init-Skripten gesetzt werden und Benutzerlimits sollten während der Benutzeranmeldung gesetzt werden, z.B. mit pam_limits.

Oftmals werden beim Booten des Rechners Standardwerte gesetzt. Auch wenn Sie also Ihr ulimit in einer individuellen Shell zurücksetzen, kann es sein, dass es beim Neustart wieder auf den vorherigen Wert zurückgesetzt wird. Sie sollten Ihre Boot-Skripte nach den ulimit-Befehlen durchsuchen, wenn Sie den Standardwert ändern möchten.

Kommentare (3)

Wenn Sie Linux verwenden und der Berechtigungsfehler auftritt, müssen Sie die erlaubte Grenze in der Datei /etc/limits.conf oder /etc/security/limits.conf erhöhen (wo sich die Datei befindet, hängt von Ihrer spezifischen Linux-Distribution ab).

Um zum Beispiel jedem auf dem Rechner zu erlauben, die Anzahl der offenen Dateien auf 10000 zu erhöhen, fügen Sie diese Zeile in die Datei limits.conf ein.

* hard nofile 10000

Dann loggen Sie sich aus und melden Sie sich erneut an Ihrem System an und Sie sollten in der Lage sein, dies zu tun:

ulimit -n 10000

ohne einen Berechtigungsfehler.

Kommentare (6)
  1. Fügen Sie die folgende Zeile zu /etc/security/limits.conf hinzu
webuser hard nofile 64000

dann als Webuser anmelden

su - webuser
  1. Bearbeiten Sie die folgenden zwei Dateien für webuser

Fügen Sie die Dateien .bashrc und .bash_profile hinzu, indem Sie

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile
  1. Melden Sie sich ab und dann wieder an und überprüfen Sie, ob die Änderungen korrekt vorgenommen wurden:
$ ulimit -a | grep open
open files                      (-n) 64000

Das war's und sie bumm, bumm bumm.

Kommentare (2)