OS X Yosemite - Zu viele Dateien geöffnet

18

Ich habe kürzlich ein Upgrade von Mavericks auf Yosemite durchgeführt. Es traten Kopfschmerzen auf

Ich bin mir ziemlich sicher, dass mein Problem in der Anzahl der Dateien liegt, die ich öffnen kann - aber ich bin nicht sicher, wie ich es lösen soll . Ich bin mir auch ziemlich sicher, dass ich alle Artikel / Tipps zum Erstellen der /etc/sysctl.confDatei und der /etc/launchd.confDatei gelesen habe

Der Übersichtlichkeit halber sehen beide derzeit so aus (ich bin mir nicht einmal sicher, ob dies die richtigen Befehle sind, um sie wieder einzufügen - ich habe so gut wie alles und jede Kombination ausprobiert, dh höhere Werte, niedrigere Werte , Befehle entfernen, Befehle hinzufügen)

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

Ich habe auch versucht, meine ulimit-Werte zu erhöhen - sowohl global als auch lokal für meine aktuelle Sitzung ... no bueno

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                4096

Ok - hier begannen meine Kopfschmerzen anfangs ... Meine über Homebrew installierte Datenbank (Percona-Server 5.6.21-69.0) begann zu ersticken und zu sterben, und im mysql-error.log wurde sie mit dem Fehler gefüllt too many files open.

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files

Dies ist, wo ich anfänglich versuchte, dieses Problem zu lösen, indem ich mein ulimit, maxfiles, maxproc, etc ... "auffrischte".

Schließlich - frustriert, ging ich weiter und würde später auf dieses Thema zurückkommen. Also habe ich immer wieder versucht, dass sudo gem install nokogiri es fehlschlägt und denselben Fehler ausspuckt (viele Wiederholungen, dass builder.rb die native gem-Erweiterung nicht erstellt - gefolgt von einer Reihe wiederholter Stacktraces Logs Gist

nokogiri Installationsfehler nokogiri Installationsfehler

Ich habe verschiedene Ansätze ausprobiert / gegoogelt, um dieses Problem zu lösen (z. B. zusätzliche Flags usw.). Was erstaunlich ist - und als ich anfing zu denken, dass dieses Problem mit der Anzahl der geöffneten Dateien / Prozesse zusammenhängt, habe ich überprüft, topwährend der Edelstein installiert wurde ... Ich war ziemlich überrascht zu sehen, was ich gefunden habe

oben während gem install nokogiri sudo gem install nokogiri

Es sieht so aus, als würde sich mein Prozess weiter verzweigen, was dann für diese EINE Zeile in meinem vorherigen Bild Sinn machte (siehe "nokogiri install errors picture").

sh: fork: Resource temporarily unavailable

Ich habe keine Ideen mehr, bin mir aber nicht mehr sicher, wie ich die Anzahl der Dateien debuggen soll?

AKTUALISIEREN

Nun, ich habe es geschafft, Nokogiri zu installieren. Leider bin ich mir nicht ganz sicher, was das Problem behoben hat. Ich habe so viele Dinge ausprobiert. Aber ich denke, es musste mit der Neuinstallation von Ruby klappen. Es tritt jedoch immer noch das gleiche Problem auf, bei dem sich meine Datenbank über zu viele geöffnete Dateien beschwert, wenn ich eine nicht trivial kleine Datenbank verwende.

veilig
quelle
Hm. Sollte wohl nicht so viel laichen? Vielleicht lohnt es sich auch, einen Fehler bei den Entwicklern dieses Edelsteins zu machen.
Slhck

Antworten:

16

/etc/launchd.confIn Yosemite (10.10) schienen die Änderungen für viele Google-Abfragen und SO-Vorschläge für mich nicht zu funktionieren. Am Ende funktionierte die /etc/sysctl.confDatei nach zahlreichen Kombinationen aus Ändern, Neustarten und Testen, indem sie geändert (oder erstellt wurde, falls sie nicht vorhanden ist) .

Das musste ich eingeben, damit es funktioniert

kern.maxfiles=65536
kern.maxfilesperproc=65536

Ich bin mir nicht sicher, ob kern.maxfilesich da drin sein muss, aber als ich es alleine drin hatte, hatte ich immer noch das gleiche Problem, als ich hinzufügte, dass kern.maxfilesperprocalles begann zu funktionieren.

veilig
quelle
Ich stellte fest, dass ein Neustart erforderlich ist, damit diese Variablen (wie erwartet) wirksam werden. Sie können damit bestätigen, dass sich die Werte geändert haben sysctl -a | grep kern.maxfiles.
Blake Frederick
8

Zum systemweiten Anpassen der Grenzwerte für geöffnete Dateien in Mac OS X Yosemite müssen Sie zwei Konfigurationsdateien erstellen. Die erste ist eine Eigenschaftslistendatei (auch bekannt als plist) /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 geöffnete 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 Eigentum von root:wheelund über Berechtigungen verfügen -rw-r--r--. Diese Berechtigungen sollten standardmäßig aktiviert sein. Sie können jedoch sicherstellen, dass sie aktiviert sind, indem Sie sie ausführen sudo chmod 644 <filename>. Während die oben erläuterten Schritte dazu führen, dass systemweite Beschränkungen für geöffnete Dateien beim Neustart korrekt festgelegt werden, können Sie diese manuell anwenden, indem Sie ausführen launchctl limit.

Neben diesen Grenzen auf Systemebene einstellen, empfehlen wir die auf Sitzungsebene als auch durch Anhänge die folgenden Zeilen zu Ihrer Einstellung bashrc, bashprofileoder analog - Datei:

ulimit -n 65536
ulimit -u 2048

Wie die plist-Dateien sollte auch Ihre bashrc- oder ähnliche Datei -rw-r--r--Berechtigungen haben. Jetzt 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.

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

Jedateach
quelle
1
"launchctl limit maxfiles unlimited unlimited; launchctl limit maxfiles" gibt an, dass die Höchstwerte auf meinem Yosemite 10.10.5 am 30.09.2015 10240 betragen. Wenn Sie damit experimentieren, scheint sich herauszustellen, dass dies der Fall ist, wenn Sie eine größere explizite Zahl verwenden ignoriert.
Dave X
5

Die Standardeinstellungen für Yosemite scheinen 12K und 10K zu sein:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

Nur Einstellung kern.maxfilesin /etc/sysctl.confscheint meine Probleme gelöst zu haben. /etc/sysctl.confDatei:

kern.maxfiles=24576
Michel
quelle
genau die gleichen Werte für Sierra
Devin G Rhode
Allerdings launchctl limit maxfilesgab mir dies:maxfiles 256 unlimited
Devin G Rhode