Warum bleibt die Einstellung kern.maxfiles in /etc/sysctl.conf nicht erhalten?

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.maxfilesund kern.maxfilesperprocessin vor /etc/sysctl.conf.

Ich habe dies versucht und kern.maxfilesperprocessklebt nach einem Neustart, aber kern.maxfilesnicht.

% 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.confaber 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?

@w00t Ich habe die Bearbeitung rückgängig gemacht, die die nachgestellten Leerzeichen aus der conf-Datei entfernt hat - da diese Leerzeichen überhaupt das Problem waren, halte ich es für sinnvoller, sie in der Frage zu belassen.
fair genug, bearbeitete Frage stattdessen, um dies anzuzeigen.
@w00t Ihre letzte vorgeschlagene Änderung wurde von einem Diamond-Mod abgelehnt (nicht von mir) - möglicherweise, weil ich bereits eine Warnung in den Text selbst eingefügt habe, nachdem ich Ihre Änderung rückgängig gemacht habe. Ich hätte es dich wissen lassen sollen, als ich das gemacht habe – dein Punkt war gut, also hatte ich nach dem Zurücksetzen und Kommentieren das Gefühl, dass es etwas brauchte – hoffentlich deckt meine letzte Bearbeitung es ab?

Antworten (3)

Obwohl Sie Ihre Frage nicht direkt beantworten, finden Sie bei superuser zwei Lösungen :

  1. 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.plistmit 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/

  2. Das Ändern der /etc/launchd.confpro 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.confDatei.

    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.

Obwohl das Problem dadurch nicht behoben wurde, bietet es eine Problemumgehung (die erste Plist-Datei). Danke auch für die Hilfe bei der Suche nach der eigentlichen Ursache. Prämie zuerkannt.
Wissen Sie vielleicht, wie Sie das höhere Limit auf "unbegrenzt" setzen können, wie es OS X standardmäßig tut? Ich möchte diese Antwort speziell anpassen, um ulimit -n auf 1000 zu erhöhen und keinen anderen Aspekt zu ändern, um einige Leistungstests durchzuführen ein Softwarepaket.
@bmike hmm, welche Obergrenze? -n = 1000 als Soft-Limit und unbegrenztes Hard-Limit. Welches Betriebssystem? 10.10 oder 10.9 und niedriger?
Ich habe einen anderen Weg gefunden, das zu tun, was ich wollte, um das Programm unter launchctl zu stellen und die dortigen Grenzen in einer plist zu verwenden. Ich werde eine neue Frage stellen, sobald meine Codeänderungen überprüft und an anderer Stelle zusammengeführt wurden.
Wenn Sie Java unter MacOS X verwenden, müssen Sie auch -XX:-MaxFDLimitan 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~.

Diese Datei funktioniert nicht mehr auf neueren Versionen von macOS