Welcher Befehl/welche Konfigurationsdatei steuert die Beschränkungen für offene Dateien unter OS X? Gibt es einen anderen Befehl für OS X 10.5 / 10.6 / 10.7? Die Optionen, die ich unten untersuche, sind ulimit
, sysctl
, undlaunchctl
"Zu viele offene Dateien" ist anscheinend ein häufiger Fehler bei Leopard, möglicherweise anderen Versionen von OS X:
Es gibt viele (verwandte?) Möglichkeiten, die Limits für offene Dateien anzuzeigen:
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 512
virtual memory (kbytes, -v) unlimited
$ launchctl limit
cpu unlimited unlimited
filesize unlimited unlimited
data unlimited unlimited
stack 8388608 67104768
core 0 unlimited
rss unlimited unlimited
memlock unlimited unlimited
maxproc 1024 2048
maxfiles 2048 4096
$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049
In einigen der obigen Beiträge wurde behauptet, dass diese mit den folgenden Befehlen geändert werden können:
sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768
Von den oben genannten Befehlen haben jedoch nur die sysctl
Befehle eine scheinbare Wirkung (dh ulimit -n
und launchctl limit
zeigen keine Änderung, nachdem die oben genannten Befehle eingegeben wurden, während sysctl -a
die angeforderten Änderungen angezeigt werden).
Die entsprechenden Orte zum Ändern dieser Parameter für das Betriebssystem sind:
/etc/sysctl.conf
/etc/launchd.conf
Ich habe auch eine Antwort entdeckt, die lautet, dass ulimit
nur die aktuelle Shell gesteuert wird.
Wie kann ich die maximale Dateianzahl / maximale Anzahl offener Dateien unter macOS nach oben anpassen?
Früher lautete die einfache Antwort, dass es mehrere Limits gab und das niedrigste Limit, das Sie in einem bestimmten Fall erreichen, Ihren Fehler generiert. Jetzt am 10.12 launchctl limit maxfiles
ist auch mit dabei. Für Details zur Implementierung wird diese großartige Antwort belohnt und verdient mehr Stimmen, als ich ihr geben kann.
Weitere relevante Threads sind:
Die ulimit
Stufe ist niedrig eingestellt, um zu verhindern, dass ein schlechtes Shell-Skript den Kernel mit offenen Dateien überschwemmt.
Das kern.maxfilesperproc
ist da, um ein wenig Platz in der maximalen Anzahl von Dateien zu lassen, damit ein Prozess den größten, aber nicht den gesamten Speicherplatz für offene Dateihandler aus dem Kernel verwenden kann.
Für normale Situationen kern.maxfiles
ist dies der letzte begrenzende Faktor.
Auf Sierra - die Grenzen sind 256 geöffnete Dateien und unbegrenztes Maximum, also finde ich, dass das Setzen von 3 bis 4.000 Dateien für das Soft-Limit für fast unsere gesamte Hardware funktioniert und das System trotzdem reaktionsfähig hält, wenn ein außer Kontrolle geratener Prozess zu viele öffnet Dateien. Wir halten unsere Entwicklungsserver gerne auf der 256-Grenze, damit wir undichte und problematische Software in der Entwicklung/Staging und beim Testen abfangen, anstatt davon in der Produktion zu erfahren.
Ich bin kein Fan von 10.000 Dateien – vielleicht werden wir mit APFS und NVMe-Speicher den Tag sehen, an dem das nicht undenkbar ist, aber versuchen Sie, bei Ihren Dateigrenzen bei Hunderten oder niedrigen Tausenden zu bleiben. Besonders wenn Ihr Mac ein niedriges Prozesslimit hat, kann es problematisch sein, so viele Dateien von so wenigen Prozessen öffnen zu lassen.
Es scheint, als gäbe es für jede Version von OS X eine völlig andere Methode, um das Limit für offene Dateien zu ändern.
Für OS X Sierra (10.12.X) müssen Sie:
1. Erstellen Sie in Library/LaunchDaemons
eine Datei mit limit.maxfiles.plist
dem Namen und fügen Sie Folgendes ein (Sie können die beiden Zahlen ändern (die jeweils die weichen und harten Grenzen sind):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>64000</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
2. Ändern Sie den Eigentümer Ihrer neuen Datei:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Laden Sie diese neuen Einstellungen:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Überprüfen Sie abschließend, ob die Grenzwerte korrekt sind:
launchctl limit maxfiles
Die folgenden sollten die häufigsten Probleme lösen (und sind in der Reihenfolge ihrer Hierarchie aufgelistet):
echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile
Anmerkungen:
In einfachen Worten:
Der ulimit
Befehl bietet "Kontrolle über die Ressourcen, die der Shell und den von ihr erstellten Prozessen zur Verfügung stehen" (siehe: help ulimit
und man bash
). Ressourcen, die der Shell gegeben werden, sind durch die Ressourcengrenzen des Systems begrenzt.
Der launchctl
steuert den maximalen Systemressourcenverbrauch durch den aktuellen Prozess (siehe: man setrlimit
und man launchctl
). Maximalwerte werden durch die Kernel-Limits begrenzt.
Der sysctl
steuert die Kernel-Limits (siehe: man sysctl
und BSD's Tuning Kernel Limits ).
Um die Limits zu erhöhen, können Sie je nach Problem jeden der Befehle verwenden.
Siehe auch: Welche Beziehung besteht zwischen `launchctl limit` und `ulimit`?
Für das Problem mit zu vielen geöffneten Dateien hängt dies davon ab, welches weiche oder harte Limit genau erreicht wurde (ob es sich um ein lokales Shell-Skript handelt, das globale Skript, das von ausgeführt wird root
, eine App oder alle Prozesse gleichzeitig). Es lohnt sich, alle Limits (Shell-, Launchd- und Kernel-Limits) zu erhöhen.
Informationen zum dauerhaften Erhöhen der Grenzwerte finden Sie unter: Wie kann der maximale Systemressourcenverbrauch auf dem Mac dauerhaft gesteuert werden?
Benutzer200857