2011-06-27 10:56:47 +0000 2011-06-27 10:56:47 +0000
102
102

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

Ich versuche, etwas zu tun, das eine große Anzahl von Dateideskriptoren erfordert

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

/usr/bin/ulimit: Zeile 4: ulimit: open files: cannot modify limit: Invalid argument.

Ich möchte die Zahl viel höher setzen, sagen wir 100000. Ist das möglich?

Antworten (4)

95
95
95
2011-06-27 21:17:50 +0000

Der Befehl ulimit ändert nur die Ressourcenlimits für die aktuelle Shell und ihre Kinder. sudo ulimit erstellt eine Root-Shell, passt deren Limits an und beendet sich dann (und hat damit, soweit ich sehen kann, keinen wirklichen Effekt).
Um 12288 zu überschreiten, müssen Sie die kern.maxfiles- und kern.maxfilesperproc-Parameter des Kernels anpassen, und auch (zumindest laut diesem Blogeintrag , der eine Zusammenfassung von dieser Diskussion ist) ein launchd-Limit. Sie können launchctl limit verwenden, um alle diese Parameter auf einmal einzustellen:

sudo launchctl limit maxfiles 1000000 1000000

Um dies dauerhaft zu machen (d.h. nicht zurückgesetzt, wenn Sie neu starten), erstellen Sie /etc/launchd.conf mit:

limit maxfiles 1000000 1000000

Dann können Sie ulimit (aber ohne das sudo) verwenden, um Ihr Prozesslimit einzustellen.

Wenn dies nicht ausreicht, stoßen Sie möglicherweise auf Größenbeschränkungen im Kernel. Wenn Ihr Modell es unterstützt , kann das Booten des Kernels im 64-Bit-Modus helfen.

42
42
42
2012-12-03 12:07:46 +0000

Die folgenden sollten die meisten Lösungen beheben (und sind in der Reihenfolge ihrer Hierarchie aufgeführt):

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

Hinweise:

  1. Sie müssen neu starten, damit diese Änderungen wirksam werden.
  2. Soweit ich weiß, können Sie unter OS X keine Grenzen mehr auf “unbegrenzt” setzen
  3. launchctl maxfiles wird durch sysctl maxfiles begrenzt und kann diese daher nicht überschreiten
  4. sysctl scheint kern.maxfilesperproc von launchctl maxfiles zu erben
  5. ulimit scheint seinen ‘open files’-Wert standardmäßig von launchctl zu erben
  6. Sie können ein benutzerdefiniertes ulimit in /etc/profile oder ~/.profile setzen; obwohl dies nicht erforderlich ist, habe ich ein Beispiel angegeben
  7. Seien Sie vorsichtig, wenn Sie einen dieser Werte auf eine sehr hohe Zahl im Vergleich zu den Standardwerten setzen - die Eigenschaften bestehen Stabilität/Sicherheit. Ich habe diese Beispielzahlen genommen, die ich für vernünftig halte und die auf anderen Websites stehen.
20
20
20
2011-12-10 10:11:12 +0000

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.

Die Angabe von numerischen Werten sowohl für das weiche als auch für das harte Limit erfüllt den Zweck:

% sudo launchctl limit maxfiles 4096 8192
3
3
3
2018-12-21 14:43:27 +0000

Unter OS X 10.13.6 funktioniert dies bei mir:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576