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


Ich muss die lästige "Too many files in system" Grenze auf OS X 10.7.1 loswerden.

Gibt es einen Weg?


150
2018-06-07 08:52


Ursprung


Möchtest du mehr darüber erzählen, wenn das passiert? Unter welchen Umständen? - slhck
@slhck - Ich habe das gleiche Problem. Die Umstände sind grundsätzlich "zufällig". Ich bin ein Entwickler, also verwende ich meinen Mac ziemlich stark: eine oder mehrere Datenbanken, einen Webserver, Test-Tools, einen oder mehrere Browser und einen Musik-Player auf einmal ausführen. Google Chrome scheint ein Programm zu sein, das viele Dateien geöffnet hat. - Nathan Long
Eigentlich war mein "starker Gebrauch" nicht das Problem; Meine Einstellungen für die maximale Anzahl von offenen Dateien für den Kernel und pro Prozess waren weit niedriger als die Standardeinstellungen. - Nathan Long
Wenn Sie Nathans Kommentar gelesen haben und sich gefragt haben, warum er keine Details zu den Vorgaben beigefügt hat, dann deshalb, weil er in seiner Antwort unten alles buchstabiert hat. (Gute Antwort! :) - Olie
Ich bin in den gleichen Nutzungsumständen wie Nathan Long und stellte fest, dass der Neustart von Apache der einzige Schritt war, der das Problem "löste". Ich habe alle Unterschreitungen angewendet, aber sie haben mir nicht sofort geholfen. Ich laufe Kommandozeile phpUnit Tests> Selen Server> Firefox> Apache> PHP> MySQL alle auf dem gleichen MacBook. Wurde verwendet, um gut zu funktionieren, bis ich zu Mavericks upgradete. Der Fehler, den ich erhalte, ist in der getesteten Webanwendung, d. H. Es ist php / apache, das keine Dateien mehr enthält, also vermutlich nicht von der Shell-Einstellung gesteuert wird. - scipilot


Antworten:


Gemäß Dieser hilfreiche Artikel (was ich empfehlen zu lesen):

Standardmäßig ist die maximale Anzahl von Dateien festgelegt, die Mac OS X öffnen kann   zu 12.288 und die maximale Anzahl von Dateien, die ein bestimmter Prozess öffnen kann, ist   10,240.

Sie können diese ü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 du wählst)
  • sysctl -w kern.maxfilesperproc=18000 (oder welche Nummer du wählst)

Um die Änderung dauerhaft zu machen, verwenden Sie sudo um deine Einstellungen zu speichern /etc/sysctl.conf (die Sie möglicherweise erstellen müssen), so:

kern.maxfiles=20480
kern.maxfilesperproc=18000

Hinweis: Unter OS X 10.10 oder niedriger können Sie Einstellungen hinzufügen /etc/launchd.conf mögen limit maxfiles und es wird überschreiben, was auch immer du hier fügst.

Nochmals, aus dem Artikel:

Sobald Sie dies getan haben, wird der Kernel selbst eine maximale Anzahl von haben   Dateien, aber die Shell möglicherweise nicht. Und da die meisten Prozesse dauern werden   Auf diese Weise werden viele Dateien von der Shell initiiert, die Sie sind   Ich will das erhöhen.

Der Befehl dafür lautet:

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

Diese Veränderung ist auch vorübergehend; es dauert nur für die aktuelle Shell-Sitzung. Sie können es Ihrer Shell-Konfigurationsdatei hinzufügen (.bashrc, .zshrc oder was auch immer), wenn Sie möchten, dass es jedes Mal ausgeführt wird, wenn Sie eine Shell öffnen.


198
2018-06-29 20:23



Welche Grenze gilt für Prozesse, die durch Klicken auf Symbole im Startbereich gestartet werden? Und wie man dieses Limit ändert? Wenn Sie "Shell" sagen, nehme ich an, Sie meinen eine interaktive Terminal-Shell. - Cheeso
@Cheeso - Ich denken dass das Gesamtsystemlimit (sysctl) oder das Launchd-Limit, je nachdem, welcher Wert niedriger ist, dies steuert. - Nathan Long
Erstellen einer /etc/launchd.conf mit Inhaltslimit maxfiles 1000000 1000000 hat super für mich gearbeitet! (OSX 10.8.2 hier) - Zugwalt
Ich legte kern.maxfiles=65000 kern.maxfilesperproc=65000 in /etc/sysctl.conf und neu gestartet. kern.maxfiles wurde ignoriert und blieb die Standardeinstellung, aber kern.maxfilesperproc wurde auf 65000 gesetzt. Ich habe keine /etc/launchd.conf, also was ist los damit? - pferrel
Wenn jemand Probleme mit Max-Dateien hat, die nicht hängen bleiben, dann ist dies, weil hinter der Maxfiles-Zeile ein Leerzeichen steht, das gelöscht werden muss. - jjathman


Es scheint, als gäbe es eine völlig andere Methode, um das Limit für offene Dateien für jede Version von OS X 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üge folgendes ein (ändere die beiden Zahlen (was die weichen und harten Grenzen sind):

<?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.  Laden Sie 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

51
2018-01-24 14:56



hat perfekt funktioniert, danke! In meinem Fall manifestiert sich der Fehler in einem Java-Prozess mit der Nachricht IO Error: Bad file descriptor (Write failed) - agradl
Funktioniert auch auf El Capitan 10.11.6 - Troy Daniels
kann das ulimit für Shell immer noch nicht ändern. Das Maximum bleibt 1024 was auch immer ich mache - DataGreed
In Schritt 2 starte: sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist - Hai Nguyen


Sie müssen Ihre ulimit-Einstellungen erhöhen - unter OS X ist das heutzutage ziemlich niedrig - standardmäßig 256. Hinzufügen ulimit -n 4096 oder ähnlich wie Ihre ~ / .profile oder gleichwertig und das wird es in Ihrer lokalen Umgebung lösen. Lauf ulimit -a um deine aktuellen Levels zu überprüfen

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

launchctl limit maxfiles

Es ist in Lion (10240) pro Prozess viel höher angesetzt als früher. Aber wenn Sie es immer noch dort treffen, können Sie es höher setzen, indem Sie den gleichen Befehl mit den gewünschten Stufen verwenden. Um die Änderungen dauerhaft zu machen, müssen Sie in /etc/launchd.conf die entsprechenden Zeilen hinzufügen.


29
2018-06-07 11:09



256? Es sind 2560 Dateideskriptoren für mich und ich habe es nie geändert. Das Limit ist 266 Prozesse (vgl. ulimit -a). - slhck
Das Gleiche gilt für 256 Dateien auf MacOS X Maverick - Climbatize
256 auf OS X Yosemite auch - Alexander
256 auf El Capitan auch. - TMN
256 in Yosemite. - Jaec


Andere Option kann den Schuldigen 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 töten Sie den Prozess, wenn dies gewünscht wird

kill $pid

Aus den Kommentaren:

Für was es wert ist, können Sie auch eine Liste der Prozess-IDs mit den meisten geöffneten Dateien erhalten

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

17
2018-02-18 00:42



Hilfreich! Aber Sortierung unter OS X (10.11) dauert nicht -h. (Vielleicht -g?) - Robert Calhoun
Für mich hat es einfach gut geklappt -h (OS X 10.12.3): sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail - vearutop
Sei es ohne -h - sanmai
Dies ist die einzige Antwort, die mir geholfen hat, mein Problem zu verursachen. Danke :) - SgtPooki
Für was es wert ist, können Sie auch eine Liste der Prozess-IDs mit den meisten geöffneten Dateien erhalten lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail. - Chris Frederick


Leute, auf Mavericks 10.9.4

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


9
2017-09-04 16:19





Ich habe es beim Ausführen eines chmod -R gefunden, also habe ich es durch kleinere Schritte, z.

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

0
2017-12-14 18:50



Dies mag zwar ein Workaround sein, scheint aber die Frage nicht wirklich zu beantworten. Vielleicht erklären Sie, dass Sie die Nachricht nicht loswerden können, und dann schlagen Sie vor, dies als eine Möglichkeit zu betrachten, um es weniger problematisch zu machen, um Ihre Antwort zu verbessern. - music2myear


Du kannst rennen

lsof -n

welcher Prozess zu viele Dateien öffnen.

dann töte es.

oder

sysctl -w kern.maxfiles=20480

ändere es zu einem größeren.


0
2018-05-18 02:52



Bitte erläutern Sie, wie sich diese Antwort von den bereits gegebenen unterscheidet. - Stephen Rauch