Ich habe auf Yosemite (10.10.1) verschiedene Fehler vom Typ "zu viele Dateien im System geöffnet" erhalten. Das Herumsuchen schlägt die Einstellung kern.maxfiles
und kern.maxfilesperprocess
in vor /etc/sysctl.conf
.
Ich habe dies versucht und kern.maxfilesperprocess
klebt nach einem Neustart, aber kern.maxfiles
nicht.
% cat /etc/sysctl.conf
# NB DO NOT COPY AND PASTE THIS INTO YOUR CONFIG FILE - IT DOESN'T WORK
kern.maxfiles=20480
kern.maxfilesperproc=18000
(Neustart)
% sysctl kern.maxfiles
kern.maxfiles: 12288
% sysctl kern.maxfilesperproc
kern.maxfilesperproc: 18000
Wenn ich es manuell in der Befehlszeile einstelle, funktioniert es, also scheint es, als würde ich keine Obergrenze überschreiten:
% sudo sysctl -w kern.maxfiles=20480
kern.maxfiles: 12288 -> 20480
% sysctl kern.maxfiles
kern.maxfiles: 20480
Ich habe Warnungen gesehen, dass diese Werte überschrieben werden, /etc/launchd.conf
aber ich habe diese Datei nicht:
% cat /etc/launchd.conf
cat: /etc/launchd.conf: No such file or directory
Die Spotlight-Suche findet keine andere Erwähnung von kern.maxfiles
, also habe ich keine Ideen mehr. Irgendwelche anderen Vorschläge?
Obwohl Sie Ihre Frage nicht direkt beantworten, finden Sie bei superuser zwei Lösungen :
Um die Beschränkungen für offene Dateien in Mac OS X Yosemite systemweit anzupassen, müssen Sie zwei Konfigurationsdateien erstellen. Die erste ist eine Eigenschaftslistendatei (auch bekannt als plist) in „/Library/LaunchDaemons/limit.maxfiles.plist“, die die folgende XML-Konfiguration enthält:
<?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>65536</string>
<string>65536</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
Dadurch wird das Limit für offene Dateien auf 65536 festgelegt. Die zweite plist-Konfigurationsdatei sollte /Library/LaunchDaemons/limit.maxproc.plist
mit folgendem Inhalt gespeichert werden:
<?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.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
Beide Plist-Dateien müssen im Besitz von „root:wheel“ sein und die Berechtigungen „-rw-r--r--“ haben. Diese Berechtigungen sollten standardmäßig vorhanden sein, aber Sie können sicherstellen, dass sie vorhanden sind, indem Sie sudo chmod 644 <filename>
. Während die oben erläuterten Schritte dazu führen, dass systemweite Beschränkungen für offene Dateien beim Neustart korrekt festgelegt werden, können Sie sie manuell anwenden, indem Sie launchctl limit
.
Zusätzlich zum Festlegen dieser Grenzwerte auf Systemebene empfehlen wir, dies auch auf Sitzungsebene festzulegen, indem Sie die folgenden Zeilen an Ihre ‚bashrc‘-, ‚bashprofile‘- oder analoge Datei anhängen:
ulimit -n 65536
ulimit -u 2048
Wie die plist-Dateien sollte Ihre bashrc- oder ähnliche Datei -rw-r--r--
Berechtigungen haben. An diesem Punkt können Sie Ihren Computer neu starten und ulimit -n in Ihr Terminal eingeben. Wenn Ihr System richtig konfiguriert ist, sollten Sie sehen, dass maxfiles auf 65536 gesetzt wurde.
Passen Sie das Maxfiles- und Maxproc-Limit nach Bedarf an
Quelle: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/
Das Ändern der /etc/launchd.conf
pro vielen Google-Abfragen und SO-Vorschläge schien für mich in Yosemite (10.10) nicht zu funktionieren. Was nach zahlreichen Änderungs-/Neustart-/Testkombinationen funktionierte, war das Ändern (oder Erstellen, falls nicht vorhanden) der /etc/sysctl.conf
Datei.
Das musste ich eingeben, damit es funktioniert
kern.maxfiles=65536
kern.maxfilesperproc=65536
Ich bin mir nicht sicher, ob „kern.maxfiles“ dort sein muss, aber als ich es alleine dort hatte, hatte ich immer noch das gleiche Problem, als ich „kern.maxfilesperproc“ hinzufügte, begann alles zu funktionieren.
Wenn eine oder beide dieser Lösungen für Sie funktionieren, geben Sie bitte die Originalplakate an.
-XX:-MaxFDLimit
an die JVM übergeben, um das höhere Limit für Dateideskriptoren abzurufen.Durch eine Kombination aus sicherem/ausführlichem Booten, Konsolenprotokoll und Google fand ich ein ähnliches Problem , das dazu führte, dass ich ein abschließendes Leerzeichen in der Maxfiles-Zeile entdeckte. Durch das Entfernen dieses Leerzeichens wurde das Problem behoben.
Bitte überprüfen Sie noch einmal, dass die Zeilen in sysctl.conf kein nachfolgendes Leerzeichen haben. Dies scheint ein Problem mit Yosemite zu verursachen, während es mit früheren Versionen ordnungsgemäß funktionierte.
Korrigierte Einstellungen (diese können bedenkenlos kopiert werden):
kern.maxfiles=20480
kern.maxfilesperproc=18000
Das Entfernen nachgestellter Leerzeichen erfordert nur einen Schritt:
sed -i '~' -e's/[[:space:]]*$//' /etc/sysctl.conf
Der obige Befehl speichert auch ein Backup unter /etc/sysctl.conf~
.
CupawnTae
w00t
CupawnTae