Möchten Sie mehr darüber erklären, wann dies geschieht? Unter welchen umständen
Slhck
1
@slhck - Ich habe das gleiche Problem. Die Umstände sind grundsätzlich "zufällig". Da ich ein Entwickler bin, benutze ich meinen Mac ziemlich häufig: eine oder mehrere Datenbanken, einen Webserver, Testtools, einen oder mehrere Browser und einen Musikplayer gleichzeitig. Google Chrome scheint ein Programm zu sein, in dem viele Dateien geöffnet sind.
Nathan Long
Eigentlich war meine "starke Beanspruchung" nicht das Problem; Meine Einstellungen für die maximale Anzahl offener Dateien für Kernal und Pro-Prozess lagen weit unter den Standardwerten.
Nathan Long
2
Wenn Sie Nathans Kommentar gelesen haben und sich gefragt haben, warum er keine Details zu den Standardeinstellungen angegeben hat, liegt dies daran, dass er alles in seiner Antwort unten dargelegt hat. (Schöne Antwort! :)
Olie
Ich habe die gleichen Verwendungsbedingungen wie Nathan Long und fand, dass der Neustart von Apache der einzige Schritt war, der das Problem "löste". Ich habe alle unten angegebenen Grenzwerterhöhungen angewendet, aber sie haben nicht sofort geholfen. Ich führe Kommandozeilen-PhpUnit-Tests> Selenserver> Firefox> Apache> Php> MySQL alle auf dem gleichen MacBook aus. Hat funktioniert, bis ich zu Außenseitern aufgestiegen bin. Der Fehler, den ich bekomme, liegt in der getesteten Web-App, dh, in PHP / Apache sind keine Dateien mehr verfügbar, sodass er vermutlich nicht von der Shell-Einstellung gesteuert wird.
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 zu speichern /etc/sysctl.conf(die Sie möglicherweise erstellen müssen):
kern.maxfiles=20480
kern.maxfilesperproc=18000
Hinweis: In OS X 10.10 oder niedriger können Sie die Einstellung /etc/launchd.conflike hinzufügen, limit maxfilesund alles, was Sie hier eingeben, wird überschrieben.
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 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 ( oder was auch immer) hinzufügen .bashrc, .zshrcwenn Sie möchten, dass es bei jedem Öffnen einer Shell ausgeführt wird.
Welches Limit gilt für Prozesse, die durch Klicken auf Symbole im Startbereich gestartet werden? Und wie kann man diese Grenze ändern? Wenn Sie "Shell" sagen, gehe ich davon aus, dass Sie eine interaktive Terminal-Shell meinen.
Cheeso
@Cheeso - Ich denke, dass das Gesamtsystemlimit (sysctl) oder das Launchd-Limit, je nachdem, welches niedriger ist, dies steuert.
Nathan Long
1
das erstellen einer /etc/launchd.conf mit inhaltslimit maxfiles 1000000 1000000 hat bei mir super funktioniert! (OSX 10.8.2 hier)
Zugwalt
1
Ich habe kern.maxfiles=65000 kern.maxfilesperproc=65000/etc/sysctl.conf eingegeben 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 damit los?
Pferrel
2
Wenn jemand Probleme damit hat, dass max-Dateien nicht hängen bleiben, muss ein Leerzeichen nach der Zeile maxfiles gelöscht werden.
Jjathman
62
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.plistund fügen Sie Folgendes ein (Sie können die beiden Zahlen (die weichen bzw. harten Grenzen) jederzeit ändern):
hat einwandfrei funktioniert, danke! In meinem Fall manifestierte sich der Fehler in einem Java-Prozess mit der MeldungIO Error: Bad file descriptor (Write failed)
agradl
1
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 tue
DataGreed
Führen Sie in Schritt 2 Folgendes aus: sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist
Hai Nguyen
32
Sie müssen Ihre ulimit-Einstellungen erhöhen - es ist heutzutage ziemlich niedrig unter OS X - standardmäßig 256. Fügen Sie ulimit -n 4096Ihr ~ / .profile oder ein gleichwertiges Element hinzu, um es in Ihrer lokalen Umgebung zu lösen. Führen Sie aus ulimit -a, 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.
Für das neueste MacOS (zum Zeitpunkt des Schreibens: 10.14.1) können Sie verwenden sudo launchctl limit maxfiles 64000 524288(standardmäßig waren es 256), dies funktioniert jedoch nur innerhalb der aktuellen Sitzung. Verwenden Sie den launchctlJob von @ninjaPixel ( https://superuser.com/a/1171028/760235 ) für eine dauerhafte Lösung.
Dies mag zwar ein Workaround sein, scheint jedoch die Frage nicht wirklich zu beantworten. Vielleicht würde es Ihre Antwort verbessern, wenn Sie erklären, dass Sie die Nachricht nicht loswerden können, und dies dann als eine Möglichkeit vorschlagen, um sie weniger problematisch zu machen.
Führen Sie Folgendes aus, um die aktuellen Grenzwerte auf Ihrem Mac OS X-System zu überprüfen:
launchctl limit maxfiles
Die letzten beiden Spalten sind die weichen bzw. harten Grenzen.
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) in /Library/LaunchDaemons/limit.maxfiles.plist, die die folgende XML-Konfiguration enthält:
Dadurch wird das Limit für geöffnete Dateien auf 200000 festgelegt. Die zweite Plist-Konfigurationsdatei sollte in /Library/LaunchDaemons/limit.maxproc.plist mit folgendem Inhalt gespeichert werden:
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 sudo chmod 644 ausführen. 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 launchctl limit ausführen.
Zusätzlich zum Festlegen dieser Grenzwerte auf Systemebene empfehlen wir, diese auch auf Sitzungsebene festzulegen, indem Sie die folgenden Zeilen an Ihre bashrc-, bashprofile- oder analoge Datei anhängen:
ulimit -n 200000
ulimit -u 2048
Wie die plist-Dateien sollte auch Ihre bashrc-Datei oder eine ä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 200000 gesetzt wurde.
Sie können diesem Artikel für weitere Details folgen.
Entweder sollte der Beitrag als Duplikat markiert werden, wenn bereits eine Antwort vorliegt. Anderenfalls senden Sie die relevanten Informationen über einen Link, da der Link möglicherweise nicht für immer gültig ist.
Antworten:
Nach diesem hilfreichen Artikel (den ich zum Lesen empfehle):
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 zu speichern/etc/sysctl.conf
(die Sie möglicherweise erstellen müssen):Hinweis: In OS X 10.10 oder niedriger können Sie die Einstellung
/etc/launchd.conf
like hinzufügen,limit maxfiles
und alles, was Sie hier eingeben, wird überschrieben.Wieder aus dem Artikel:
Der Befehl dafür lautet:
Diese Änderung ist auch vorübergehend; es dauert nur für die aktuelle Shell-Sitzung. Sie können es zu Ihrer Shell-Konfigurationsdatei ( oder was auch immer) hinzufügen
.bashrc
,.zshrc
wenn Sie möchten, dass es bei jedem Öffnen einer Shell ausgeführt wird.quelle
kern.maxfiles=65000 kern.maxfilesperproc=65000
/etc/sysctl.conf eingegeben 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 damit los?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):2. Ändern Sie den Eigentümer Ihrer neuen Datei:
3. Laden Sie diese neuen Einstellungen:
4. Überprüfen Sie abschließend, ob die Grenzwerte korrekt sind:
quelle
IO Error: Bad file descriptor (Write failed)
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
Ihr ~ / .profile oder ein gleichwertiges Element hinzu, um es in Ihrer lokalen Umgebung zu lösen. Führen Sie ausulimit -a
, um Ihre aktuellen Ebenen zu überprüfenFühren Sie Folgendes aus, um die Systemeinstellungen anzuzeigen:
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.
quelle
ulimit -a
).Eine andere Möglichkeit könnte sein, den Täter zu finden:
Beim letzten konnte man sehen, welche Dateien geöffnet sind:
Und beenden Sie den Vorgang, wenn Sie dies wünschen
Aus den Kommentaren:
quelle
-h
(OS X 10.12.3):sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
diese Option, um das Abschneiden des Prozessnamens zu verhindern.Leute, auf Mavericks 10.9.4
ulimit -n 2048
funktioniert gut. Möglicherweise müssen Sie eine neue Anmeldesitzung starten.quelle
Für das neueste MacOS (zum Zeitpunkt des Schreibens: 10.14.1) können Sie verwenden
sudo launchctl limit maxfiles 64000 524288
(standardmäßig waren es 256), dies funktioniert jedoch nur innerhalb der aktuellen Sitzung. Verwenden Sie denlaunchctl
Job von @ninjaPixel ( https://superuser.com/a/1171028/760235 ) für eine dauerhafte Lösung.quelle
Du kannst rennen
welcher Prozess zu viele Dateien öffnen.
dann töte es.
oder
ändere es in ein größeres.
quelle
Nach allen Änderungen über meinem Java hat nicht mehr als 10000 Dateien gemacht. Lösung war dieses jvm-Flag -XX: -MaxFDLimit
quelle
Ich bin darauf gestoßen, als ich ein chmod -R gemacht habe
quelle
Ähnlich wie https://superuser.com/a/1171028/367819
Führen Sie Folgendes aus, um die aktuellen Grenzwerte auf Ihrem Mac OS X-System zu überprüfen:
Die letzten beiden Spalten sind die weichen bzw. harten Grenzen.
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) in /Library/LaunchDaemons/limit.maxfiles.plist, die die folgende XML-Konfiguration enthält:
Dadurch wird das Limit für geöffnete Dateien auf 200000 festgelegt. Die zweite Plist-Konfigurationsdatei sollte in /Library/LaunchDaemons/limit.maxproc.plist mit folgendem Inhalt gespeichert werden:
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 sudo chmod 644 ausführen. 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 launchctl limit ausführen.
Zusätzlich zum Festlegen dieser Grenzwerte auf Systemebene empfehlen wir, diese auch auf Sitzungsebene festzulegen, indem Sie die folgenden Zeilen an Ihre bashrc-, bashprofile- oder analoge Datei anhängen:
Wie die plist-Dateien sollte auch Ihre bashrc-Datei oder eine ä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 200000 gesetzt wurde.
Sie können diesem Artikel für weitere Details folgen.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Denken Sie daran, Ihren Mac neu zu starten, damit die Werte wirksam werden.
quelle