Ich muss das lästige Limit "Zu viele offene Dateien im System" unter OS X 10.7.1 beseitigen.
Gibt es einen Weg?
Ich muss das lästige Limit "Zu viele offene Dateien im System" unter OS X 10.7.1 beseitigen.
Gibt es einen Weg?
Antworten:
Nach 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 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.conf
like hinzufügen, limit maxfiles
und 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
, .zshrc
wenn Sie möchten, dass es bei jedem Öffnen einer Shell ausgeführt wird.
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):
<?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 Eigentümer 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
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 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.
ulimit -a
).
Eine andere Möglichkeit könnte sein, den Täter zu finden:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Beim letzten konnte man 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
-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.
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 launchctl
Job von @ninjaPixel ( https://superuser.com/a/1171028/760235 ) für eine dauerhafte Lösung.
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.
Nach allen Änderungen über meinem Java hat nicht mehr als 10000 Dateien gemacht. Lösung war dieses jvm-Flag -XX: -MaxFDLimit
Ich bin darauf gestoßen, als ich ein chmod -R gemacht habe
# for each directory
find . -type d -exec chmod 755 {} \;
Ä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:
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:
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
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:
<?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 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.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Denken Sie daran, Ihren Mac neu zu starten, damit die Werte wirksam werden.