it-swarm.com.de

Gibt es eine Korrektur für den Fehler "Zu viele offene Dateien im System" unter OS X 10.7.1?

Ich muss das lästige Limit "Zu viele offene Dateien im System" unter OS X 10.7.1 beseitigen.

Gibt es einen Weg?

176
John Wilund

Laut diesem hilfreichen Artikel (den ich zum Lesen empfehle):

Standardmäßig ist die maximale Anzahl von Dateien, die Mac OS X öffnen kann, auf 12.288 festgelegt, und die maximale Anzahl von Dateien, die ein bestimmter Prozess öffnen kann, beträgt 10.240.

Sie können dies überprüfen mit:

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

Sie können die Limits (auf eigenes Risiko) erhöhen mit:

  • sysctl -w kern.maxfiles=20480 (oder welche Nummer auch immer Sie wählen)
  • sysctl -w kern.maxfilesperproc=18000 (oder welche Nummer auch immer Sie wählen)

Um die Änderung dauerhaft zu machen, verwenden Sie Sudo, um Ihre Einstellungen in /etc/sysctl.conf abzulegen (den Sie möglicherweise erstellen müssen):

kern.maxfiles=20480
kern.maxfilesperproc=18000

Hinweis: In OS X 10.10 oder niedriger können Sie Einstellungen in /etc/launchd.conf wie limit maxfiles hinzufügen, die alle hier angegebenen Einstellungen überschreiben.

Wieder aus dem Artikel:

Sobald Sie dies getan haben, verfügt der Kernel selbst über eine maximale Anzahl von Dateien, die Shell jedoch möglicherweise nicht. Und da die meisten Prozesse, die so viele Dateien aufnehmen, von der Shell initiiert werden, möchten Sie diese Zahl erhöhen.

Der Befehl dafür lautet:

ulimit -S -n 2048 # or whatever number you choose

Diese Änderung ist auch vorübergehend; es dauert nur für die aktuelle Shell-Sitzung. Sie können es zu Ihrer Shell-Konfigurationsdatei hinzufügen (.bashrc, .zshrc oder was auch immer), wenn Sie möchten, dass es bei jedem Öffnen einer Shell ausgeführt wird.

218
Nathan Long

Es scheint, als gäbe es für jede Version von OS X eine völlig andere Methode, um das Limit für geöffnete Dateien zu ändern!

Für OS X Sierra (10.12.X) müssen Sie:

1. Erstellen Sie eine Datei unter /Library/LaunchDaemons/limit.maxfiles.plist und fügen Sie Folgendes ein (Sie können die beiden Zahlen (die weichen bzw. harten Grenzen) jederzeit ändern):

<?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>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

2. Ändern Sie den Besitzer Ihrer neuen Datei:

Sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. Lade diese neuen Einstellungen:

Sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. Überprüfen Sie abschließend, ob die Grenzwerte korrekt sind:

launchctl limit maxfiles
59
ninjaPixel

Sie müssen Ihre ulimit-Einstellungen erhöhen - es ist heutzutage ziemlich niedrig unter OS X - standardmäßig 256. Fügen Sie ulimit -n 4096 oder ähnliches zu Ihrem ~/.profile oder einem gleichwertigen Element hinzu, und das wird es in Ihrer lokalen Umgebung lösen. Führen Sie ulimit -a aus, um Ihre aktuellen Ebenen zu überprüfen

Führen Sie Folgendes aus, um die Systemeinstellungen anzuzeigen:

launchctl limit maxfiles

In Lion (10240) liegt sie pro Prozess deutlich höher als früher. Wenn Sie es dort jedoch immer noch treffen, können Sie es mit demselben Befehl mit den gewünschten Pegeln höher einstellen. Um die Änderungen dauerhaft zu machen, müssen Sie in /etc/launchd.conf die entsprechenden Zeilen hinzufügen.

31
Adam C

Eine andere Möglichkeit könnte sein, den Täter zu finden:

Sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

Für den letzten konnten Sie sehen, welche Dateien geöffnet sind:

Sudo lsof -n | grep socketfil

Und beenden Sie den Vorgang, wenn Sie dies wünschen

kill $pid

Aus den Kommentaren:

Sie können auch eine Liste der Prozess-IDs mit den am häufigsten geöffneten Dateien abrufen

lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
26
sanmai

Leute, auf Mavericks 10.9.4

ulimit -n 2048 funktioniert einwandfrei. Möglicherweise müssen Sie eine neue Anmeldesitzung starten.

9
Clustermagnet

Für das neueste MacOS (zum Zeitpunkt des Schreibens: 10.14.1) können Sie Sudo launchctl limit maxfiles 64000 524288 verwenden (standardmäßig waren es 256), dies funktioniert jedoch nur innerhalb der aktuellen Sitzung. Verwenden Sie launchctl job von @ninjaPixel ( https://superuser.com/a/1171028/760235 ) für eine dauerhafte Lösung.

2
Dzmitry Hubin

Nach allen obigen Änderungen hat mein Java nicht mehr als 10000 Dateien erstellt. Lösung war dieses jvm-Flag -XX: -MaxFDLimit

1
Uros Velickovic

Du kannst rennen

lsof -n

welcher Prozess zu viele Dateien öffnen.

dann töte es.

oder

sysctl -w kern.maxfiles=20480

ändere es in ein größeres.

1
SaintKnight

Ich bin darauf gestoßen, als ich ein chmod -R gemacht habe, also habe ich es durch kleinere Schritte, z.

# for each directory
find . -type d -exec chmod 755 {} \;
0
Michael