Erhöhen Sie die maximale Anzahl offener Dateideskriptoren in Snow Leopard?

112071
Chris Poole

Ich versuche, etwas zu tun, für das eine große Anzahl von Dateideskriptoren erforderlich ist

sudo ulimit -n 12288ist so hoch wie Snow Leopard gehen will; darüber hinaus führt

/ usr / bin / ulimit: Zeile 4: ulimit: offene Dateien: Limit kann nicht geändert werden: Ungültiges Argument.

Ich möchte die Zahl deutlich erhöhen, sagen wir 100000. Ist das möglich?

96
Die Antworten dieser Frage funktionieren in OSX Mavericks nicht mehr. Howard vor 10 Jahren 4
Das Ausführen von `echo limit maxfiles 10000 10000 | sudo tee -a / etc / launchd.conf` und der Neustart funktioniert für mich in Mavericks. user495470 vor 9 Jahren 2

6 Antworten auf die Frage

90
Gordon Davisson

Mit ulimitcommand werden nur die Ressourcengrenzwerte für die aktuelle Shell und ihre untergeordneten Elemente geändert, und es sudo ulimitwird eine Root-Shell erstellt, deren Grenzen angepasst und dann beendet (was meines Erachtens keinen wirklichen Effekt hat).
Um 12288 zu überschreiten, müssen Sie den Kernel kern.maxfilesund die kern.maxfilesperprocParameter anpassen und außerdem (zumindest gemäß diesem Blogeintrag, der eine Zusammenfassung dieser Diskussion darstellt ) ein Launchd-Limit. Sie können launchctl limitalle diese Einstellungen gleichzeitig anpassen:

sudo launchctl limit maxfiles 1000000 1000000 

Um dies dauerhaft zu machen (dh beim Neustart nicht zurückzusetzen), erstellen Sie /etc/launchd.confFolgendes:

limit maxfiles 1000000 1000000 

Dann können Sie ulimit(ohne sudo) das Prozesslimit anpassen.

Wenn dies nicht der Fall ist, stoßen Sie im Kernel möglicherweise auf Größenbeschränkungen. Wenn Ihr Modell dies unterstützt, kann es hilfreich sein, den Kernel im 64-Bit-Modus zu starten.

`sudo launchctl limit maxfiles 1000000 unlimited` Weder das harte noch das weiche Limit für" maxfiles "kann unbegrenzt sein. Bitte verwenden Sie einen numerischen Parameter für beide. Thomas Hunter vor 10 Jahren 0
Seien Sie vorsichtig, wenn Sie diese Zeile zu 'launchd.conf' hinzufügen. Ich denke, wenn die Anzahl zu klein ist, kann dies Ihren Computer unbrauchbar machen. Ich habe zum Beispiel `limit maxfiles 1024 1024` verwendet und es fiel mir wirklich schwer, ihn wieder zu ändern. Shawn vor 9 Jahren 2
Leider: "Die Datei /etc/launchd.conf wird nicht mehr aufgerufen, damit Unterbefehle während des frühen Startens ausgeführt werden können; diese Funktionalität wurde aus Sicherheitsgründen entfernt." Alice Purcell vor 8 Jahren 1
Es funktioniert nicht, meine FD-Nummer darf 6 KB nicht überschreiten, auch wenn ich Ulimit -Sn 10240 erfolgreich eingestellt habe. Jian Weihang vor 8 Jahren 0
@JianWeihang-fd-Zahlen sind pro-prozessiert. Ich gehe davon aus, dass andere Prozesse 4000 Dateien geöffnet haben. Führen Sie Chrome aus? ;) Trejkaz vor 6 Jahren 0
41
errant.info

The following should resolve most solutions (and are listed in order of their hierarchy):

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 

Notes:

  1. You will need to restart for these changes to take effect.
  2. AFAIK you can no longer set limits to 'unlimited' under OS X
  3. launchctl maxfiles are bounded by sysctl maxfiles, and therefore cannot exceed them
  4. sysctl seems to inherit kern.maxfilesperproc from launchctl maxfiles
  5. ulimit seems to inherit it's 'open files' value from launchctl by default
  6. you can set a custom ulimit within /etc/profile, or ~/.profile ; while this isn't required I've provided an example
  7. Be cautious when setting any of these values to a very high number when compared with their default - the features exist stability/security. I've taken these example numbers that I believe to be reasonable, written on other websites.
Leider: "Die Datei /etc/launchd.conf wird nicht mehr aufgerufen, damit Unterbefehle während des frühen Startens ausgeführt werden können; diese Funktionalität wurde aus Sicherheitsgründen entfernt." Alice Purcell vor 8 Jahren 2
28
ninjaPixel

Es scheint, als gäbe es eine völlig andere Methode, um das Limit für offene Dateien für jede Version von OS X zu ändern!

Für OS X Sierra (10.12.X) müssen Sie:

1. Library/LaunchDaemonsErstellen Sie eine Datei mit dem Namen limit.maxfiles.plistund fügen Sie Folgendes ein (ändern Sie die beiden Zahlen (die weichen und harten Grenzen)):

<?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 Besitzer 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 
Diese Antwort ist großartig, und ich habe hier einige Hintergrundinformationen gefunden, @ninjaPixel: http://blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan/ Dean Radcliffe vor 7 Jahren 2
20
crishoj

Es scheint, dass OS X Lion "unbegrenzt" als Wert nicht zulässt:

% sudo launchctl limit maxfiles 8192 unlimited Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both. 

Durch die Angabe numerischer Werte für das weiche und das harte Limit wird die Aufgabe erfüllt:

% sudo launchctl limit maxfiles 4096 8192 
Wenn einer der Werte * unbegrenzt * war, führt die Verwendung von "-1" als Wert zu "12288". Es können auch größere numerische Werte verwendet werden, z. B. `sudo launchctl limit maxfiles 15000 150000 '. Ich bin mir jedoch nicht sicher, ob diese Einstellungen dann einen Effekt haben. Daniel Beck vor 12 Jahren 3
7
Clustermagnet

Auf Mavericks ist es einfach. Als normaler Benutzer:

ulimit -n 8192

Sie können die aktualisierten Einstellungen über überprüfen

ulimit -a

Auf meiner Maschine:

ulimit -a -t: cpu time (seconds) unlimited -f: file size (blocks) unlimited -d: data seg size (kbytes) unlimited -s: stack size (kbytes) 8192 -c: core file size (blocks) 0 -v: address space (kbytes) unlimited -l: locked-in-memory size (kbytes) unlimited -u: processes 709 -n: file descriptors 8192 
Überlegen Sie, Ihre Lösung zu überarbeiten. Sie setzen ein ulimit von 1024 und zeigen dann die Deskriptoren der Ausgabedatei als 8192 an (sollte 1024 sein). Ihr Ansatz ist auch ohne Sudo probelmatisch, versuchen Sie es einige Male für sich selbst zu ändern. y3sh vor 9 Jahren 2
sudo sollte hier nicht verwendet werden, aber diese Antwort ist falsch. Mavericks-Benutzer sollten `` `echo limit maxfiles 10000 10000 | sudo tee -a / etc / launchd.conf``` verwenden und anschließend ihren Rechner neu starten Kyle Chadha vor 9 Jahren 1
0
kenorb

Einige Grenzwerte können nicht geändert werden ulimit, da sie nur für die aktuelle Shell gelten. Daher launchctlsollte der Befehl verwendet werden, um die Grenzwerte global zu ändern, z

sudo launchctl limit maxfiles 100000 unlimited 

Bitte beachten Sie, dass die Anwendung dieser Grenzwerte /etc/launchd.conf(wie in anderen Antworten vorgeschlagen) in den letzten macOS-Versionen nicht mehr unterstützt wird. Kann zwar immer noch launchd.plist(siehe man launchd.plist:) wie pro Benutzer oder systemweite plistKonfigurationsdateien verwenden, wie hier und dort vorgeschlagen .


Um diese Grenzen dauerhaft zu machen, können Sie /etc/sysctl.confbeispielsweise file und hinzufügen:

kern.maxprocperuid=1000 kern.maxproc=2000 kern.maxfilesperproc=20000 kern.maxfiles=50000 

Damit die Änderungen wirksam werden, ist ein Neustart erforderlich.

Um die aktuellen Grenzwerte anzuzeigen, führen Sie Folgendes aus: launchctl limitoder sysctl -a | grep ^kern.max.

Siehe auch: Wie bleiben die Einstellungen von ulimit in macOS bestehen?