Warum wird kern.maxfiles nicht in /etc/sysctl.conf eingestellt?

4

Ich habe auf Yosemite (10.10.1) verschiedene "zu viele Dateien im System geöffnet" -Typfehler erhalten. Suchen in der Umgebung schlägt die Einstellung vor kern.maxfiles und kern.maxfilesperprocess im /etc/sysctl.conf.

Ich habe das versucht und kern.maxfilesperprocess klebt nach einem Neustart, aber kern.maxfiles tut 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, so dass ich anscheinend keine Obergrenze überschreite:

% sudo sysctl -w kern.maxfiles=20480 
kern.maxfiles: 12288 -> 20480
% sysctl kern.maxfiles               
kern.maxfiles: 20480

Ich habe gesehen, dass Warnungen über diese Werte in überschrieben wurden /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.maxfilesIch habe keine Ideen mehr. Irgendwelche anderen Vorschläge?

CupawnTae
quelle
@ w00t Ich habe den Schnitt rückgängig gemacht, der die nachfolgenden Leerzeichen aus der conf-Datei entfernt hat. Da diese Leerzeichen eigentlich das Problem waren, ist es meiner Meinung nach sinnvoller, sie in der Frage zu belassen.
CupawnTae
fair genug, redigierte Frage stattdessen, um dies anzuzeigen.
w00t
@ w00t Ihr letzter Änderungsvorschlag wurde von einem Diamanten-Mod (nicht von mir) abgelehnt - möglicherweise, weil ich nach dem Zurücksetzen Ihrer Bearbeitung bereits eine Warnung im Text selbst bearbeitet habe. Ich hätte dich wissen lassen sollen, als ich das getan habe - dein Punkt war gut, und so, nachdem ich umgedreht und kommentiert hatte, hatte ich das Gefühl, dass es nötig war etwas - hoffentlich deckt es meine letzte Bearbeitung ab?
CupawnTae

Antworten:

7

Obwohl Sie Ihre Frage nicht direkt beantworten, werden Sie zwei Lösungen finden Superuser :

  1. Um die Beschränkungen für offene Dateien systemweit in Mac OS X Yosemite anzupassen, müssen Sie zwei Konfigurationsdateien erstellen. Die erste ist eine Eigenschaftslistendatei (aka 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 in gespeichert werden /Library/LaunchDaemons/limit.maxproc.plist mit folgenden Inhalten:

    <?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 über die Berechtigungen '-rw-r - r--' verfügen. Diese Berechtigungen sollten standardmäßig vorhanden sein. Sie können jedoch sicherstellen, dass sie vorhanden sind, indem Sie sie ausführen sudo chmod 644 <filename>. Während die oben beschriebenen Schritte dazu führen, dass systemweite Grenzwerte für offene Dateien beim Neustart korrekt festgelegt werden, können Sie sie manuell ausführen, indem Sie sie ausführen launchctl limit.

    Zusätzlich zum Festlegen dieser Grenzwerte auf Systemebene wird empfohlen, auch auf Sitzungsebene die folgenden Zeilen an Ihre 'bashrc', 'bashprofile' oder eine analoge Datei anzuhängen:

    ulimit -n 65536
    ulimit -u 2048
    

    Wie die plist-Dateien sollte Ihre bashrc oder eine ähnliche Datei haben -rw-r--r-- Berechtigungen. An diesem Punkt können Sie Ihren Computer neu starten und ulimit -n in Ihr Terminal eingeben. Wenn Ihr System korrekt konfiguriert ist, sollten Sie sehen, dass maxfiles auf 65536 gesetzt wurde.

    Passen Sie die maxfiles & amp; Maxproc-Limit, wie Sie es brauchen

    Bezogen aus: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/

  2. Ändern der /etc/launchd.conf Viele Google-Anfragen und SO-Vorschläge schienen für mich in Yosemite (10.10) nicht zu funktionieren. Was nach einigen Kombinationen von Änderungen / Neustarts / Tests funktionierte, war das Ändern (oder Erstellen, wenn es nicht existiert) /etc/sysctl.conf Datei.

    Das musste ich einbauen, damit es funktioniert

    kern.maxfiles=65536
    kern.maxfilesperproc=65536
    

    Ich bin mir nicht sicher, ob 'kern.maxfiles' da drin sein muss, aber als ich es alleine hatte, hatte ich immer noch das gleiche Problem, als ich 'kern.maxfilesperproc' hinzufügte, alles hat funktioniert.

Wenn eine oder beide dieser Lösungen für Sie funktionieren, schreiben Sie bitte die Originalplakate gut.

klanomath
quelle
Das Problem wurde dadurch zwar nicht behoben, es wurde jedoch eine Problemumgehung (die erste Plist-Datei) bereitgestellt. Danke auch für die Hilfe bei der Jagd nach der eigentlichen Ursache. Prämie vergeben
CupawnTae
Wissen Sie vielleicht, wie Sie die Obergrenze auf "unbegrenzt" setzen, wie dies bei OS X standardmäßig der Fall ist? Ich möchte diese Antwort speziell anpassen, um den ulimit -n auf 1000 zu erhöhen und keinen anderen Aspekt zu ändern, um einige Leistungstests durchzuführen ein Softwarepaket.
bmike
@bmike hmm, welche höhere Grenze? -n = 1000 als Soft-Limit und unbegrenztes Hard-Limit. Welches Betriebssystem? 10.10 oder 10.9 und niedriger?
klanomath
Ich fand einen anderen Weg, um das zu tun, was ich wollte, um das Programm unter launchctl zu setzen und die dort vorhandenen Grenzen in einer Liste zu verwenden. Ich werde eine neue Frage stellen, sobald sich mein Code geändert hat überprüft und zusammengeführt anderswo.
bmike
4

Durch eine Kombination aus sicherem / ausführlichem Boot, Konsolenprotokoll und Google habe ich herausgefunden ein ähnliches Problem Das hat mich dazu gebracht, einen Leerraum in der Maxfiles-Zeile zu entdecken. Durch das Entfernen dieses Bereichs wurde das Problem behoben.

Bitte überprüfen Sie, ob die Zeilen in sysctl.conf kein Leerzeichen enthalten. Dies scheint ein Problem mit Yosemite zu verursachen, während es mit früheren Versionen ordnungsgemäß funktioniert hat.

Korrigierte Einstellungen (diese können sicher kopiert werden):

kern.maxfiles=20480
kern.maxfilesperproc=18000
CupawnTae
quelle
1

Das Entfernen von nachgestellten Leerzeichen erfordert nur einen Schritt:

sed -i '~' -e's/[[:space:]]*$//' /etc/sysctl.conf

Der obige Befehl speichert auch eine Sicherung unter /etc/sysctl.conf~.

sanmai
quelle