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.
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 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.
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.
/etc/security/limits.conf
hinzuwebuser hard nofile 64000
dann als Webuser anmelden
su - webuser
Fügen Sie die Dateien .bashrc und .bash_profile hinzu, indem Sie
echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile
$ ulimit -a | grep open
open files (-n) 64000
Das war's und sie bumm, bumm bumm.