Ich kann java.io.FileNotFoundException (zu viele geöffnete Dateien im System) nicht lösen

999
robster

Haftungsausschluss. Zuerst bin ich KEIN SU. Ich bin ein mittelgroßer Computerbenutzer mit etwas Erfahrung. Ich kann einige grundlegende Codes schreiben, habe Computer seit über 20 Jahren benutzt. MSDOS, zu Windows im Laufe der Jahre bin ich jetzt auf OS X. Ich habe seit ein paar Wochen hoch und tief gesucht und habe mich deshalb entschlossen, zu den großen Kanonen zu kommen, um um Hilfe zu bitten. Ich hoffe, dass Sie damit einverstanden sind.

Zuerst bin ich am OS X 10.11.6.

Ich hatte ein Problem mit meiner Crashplan-Sicherungssoftware und arbeitete mit den Support-Mitarbeitern zusammen. Es kam alles auf den Fehler:

java.io.FileNotFoundException (Too many open files in system) 

Ich las darüber und stellte fest, dass ich die Anzahl der auf meinem System zugelassenen Dateien erhöhen musste. Ich habe dabei die Werte von Dateien in erstellt und geändert /Library/LaunchDaemons.

Ich habe zwei Dateien erstellt: limit.maxfiles.plistundlimit.maxproc.plist

Innerhalb habe limit.maxfiles.plistich platziert:

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

und innerhalb habe limit.maxproc.plistich platziert:

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

Ich habe einen Neustart durchgeführt und überprüft, dass dies durch das Ausführen launchctl limit maxfilesam Terminal wirksam wurde. Dies zeigte, dass es tatsächlich war.

Ich habe crashplan erneut gestartet und es gab den gleichen Fehler. Ich habe mit den Crashplan-Leuten nachgesehen und sie sagten im Grunde hart, das ist das Problem, gehen Sie vor, um das Problem zu beheben (was fair ist, denke ich).

Also erhöhte ich die Anzahl der Dateien, die geöffnet werden dürfen, bis ich 900000000 erreicht habe. Ja, das sind insgesamt 900 Millionen Dateien, die geöffnet werden dürfen. Mehr als ich auf meiner gesamten Fahrt habe. Der Fehler bleibt bestehen. Die Überprüfung launchctl limit maxfileszeigt, dass es wirksam ist.

Das hat mich verblüfft. Ich habe mich dann umgesehen und festgestellt, dass ich einen Befehl ausführen kann, der einem ulimit -S -n 900000anderen Teil des Systems mehr Dateien gibt, mit denen er spielen kann. Ich bin nicht sicher, wie das funktioniert, aber ich habe es überprüft ulimit -aund es war in Kraft. Gleiches Problem mit Crashplan.

Nun bin ich mir nicht sicher, was ich tun soll, also bin ich gekommen, um die Leute zu fragen, die OS besser kennen als die meisten anderen. Kann jemand eine Anleitung dazu geben, was ich versuchen kann, das Problem zu lösen?

Vielen Dank.

1
Zuerst müssen Sie herausfinden, was so viele Dateien öffnet. Nach dem, was Sie gesagt haben, ist das Erhöhen der maximal geöffneten Dateien nur eine bandaid von der Hauptursache. Wie wäre es mit dem Activity Monitor und sehen Sie, ob es eine Anwendung gibt, deren Speicherverbrauch kontinuierlich steigt? Nach Speicher sortieren; Beachten Sie, was sich oben befindet und wie viel Speicherplatz vorhanden ist. geh für eine Weile weg und schau, ob es gewachsen ist. Ich wette, es ist kein CrashPlan. Diese Fragen und Antworten geben möglicherweise auch Hinweise: http://stackoverflow.com/q/20974438 jwd630 vor 7 Jahren 1
Danke für das. Ich habe am Wochenende ein paar Tests mit Screenshots des Aktivitätsmonitors durchgeführt und es gibt praktisch keine oder nur wenig Speicheränderungen für alle offenen Apps. Ich habe 16 GB RAM und hatte ständig rund 10 GB frei. robster vor 7 Jahren 0
Dann würde ich etwas etwas niedrigeres versuchen. Aus einem Terminalfenster `solange wahr; do ts = $ (Datum +% H_% M); sudo lsof> open_files _ $ ; wc -l open_files _ $ ; Schlaf 60; done` erfasst den Prozess, bei dem Dateien geöffnet sind, und zählt die Anzahl der Dateien einmal pro Minute. Wenn die Anzahl wächst, können Sie die Unterschiede erkennen, indem Sie die Ergebnisse variieren, z. B .: `diff open_files_13_13 open_files_13_14` Lassen Sie sich nicht täuschen, da es einige Unterschiede geben wird; Wenn jedoch ein Prozess konstant auffällt, haben Sie möglicherweise einen Täter. Dadurch wird jede Minute eine neue, große Datei erstellt, bis Sie sie unterbrechen: Control-C jwd630 vor 7 Jahren 0

1 Antwort auf die Frage

1
jwd630

Vielleicht beantwortet das die Frage tatsächlich für Sie. Fügen Sie Folgendes in ein Terminalfenster ein:

while true; do sudo lsof | awk '{ files[$1]++ } END { for (key in files) { print key, files[key] } }' | sort -n -k 2 | tail -10  sleep 60; done 

Was wird das machen?

  • while true - Bis Sie es unterbrechen, z. B. Control-C
  • lsof - Listet alle geöffneten Dateien auf dem System und den Namen des Prozesses (Befehls) auf, der diese Dateien geöffnet hat
  • awk - Zählen Sie die Anzahl der geöffneten Dateien nach Prozess
  • sort - Sortiere diese Liste nach der Anzahl der geöffneten Dateien
  • tail - Die 10 Prozesse mit den meisten geöffneten Dateien melden
  • Schlaf - Warten Sie eine Minute und machen Sie das Ganze noch einmal

Sie sollten den Täter entweder sofort sehen oder er wird sich bald zu lange an das Ende der Liste bewegen.

Danke dafür. Ohne diese Hilfe wäre ich festgefahren und habe keine Sicherung. Nun, ich habe noch keine Sicherung, aber ich hoffe es! :-) Das sind einige nette Terminalfähigkeiten. Hier ist das Ergebnis, nachdem Sie Ihr Skript zuerst ausgeführt haben. Laden Sie dann die Capsule-Schnittstelle und lassen Sie sie ein paar Minuten warten: mdworker 158 AppleSpel 174 Resilio 177 Telegramm 210 com.apple 245 Spotlight 248 UserEvent 278 CrashPlan 331 Dropbox 353 firefox 407 mdworker 151 AppleSpel 174 Resilio 177 Telegramm 210 com.apple 245 Spotlight 246 UserEvent 278 Dropbox 354 Firefox 389 CrashPlan 581 robster vor 7 Jahren 0
dann ... mdworker 151 AppleSpel 174 Resilio 175 Telegramm 210 com.apple 245 Spotlight 246 UserEvent 278 Dropbox 354 firefox 377 CrashPlan 727 mdworker 163 AppleSpel 174 Resilio 175 Telegram 210 Spotlight 250 com.apple 269 UserEvent 278 Dropbox 354 firefox 374 mashworker AppleSpel 174 Resilio 175 Telegramm 210 Spotlight 250 com.apple 265 UserEvent 278 Dropbox 354 firefox 375 CrashPlan 574 Wenn ich dies hinzufügte, war es in einem schönen vertikalen Layout, aber die Benutzeroberfläche von superuser.com hat es unordentlich aussehen lassen. robster vor 7 Jahren 0
Ich habe hier auch eine Pastebin-Version mit weiteren 3 Minuten Ausgabe hinzugefügt, um das Lesen von http://pastebin.com/MEpE1FKQ zu erleichtern robster vor 7 Jahren 0
Wie Sie sehen, verringert CrashPlan tatsächlich die Anzahl der geöffneten Dateien in den letzten 3 Minuten: beginnt bei 638, geht bis 580 und dann bis 581. Ich empfehle Ihnen, dieses Skript einfach laufen zu lassen, während Sie sich um Ihr Geschäft kümmern. Wenn CrashPlan das nächste Mal einen Fehler aufweist, sehen Sie, welche Prozesse zu diesem Zeitpunkt tatsächlich viele offene Dateien enthalten. Dies sind keine ungewöhnlichen Zahlen. jwd630 vor 7 Jahren 0
Danke nochmal. Unglücklicherweise hatte Crashplan in diesem Zeitraum von 3 Minuten etwa 6-mal einen Fehler. Der Fehler trat also auf, während die Protokolle erstellt wurden. Ich habe die Wiedergabetreue auf alle 10 Sekunden erhöht, und dies ist, was ich habe http://pastebin.com/S0s5DHVT Es ist immer noch keine massiven Zahlen. In dieser Zeit gab Crashplan den Fehler also viele Male an. robster vor 7 Jahren 0
Ich fürchte, ich habe fast keine Vorschläge mehr. Ich bin ein CrashPlan-Benutzer und hatte noch nie ein Problem wie dieses. Ich habe CrashPlan seit mehreren Jahren problemlos auf mehreren Macs und unter Linux ausgeführt. Die einzige andere Idee, die auftaucht: Gibt es noch etwas, das viele Dateien erstellt oder ändert, während CrashPlan entscheidet, dass es eine Sicherungskopie benötigt? Vielleicht müssen diese ausgeschlossen werden. Vielleicht erfahren Sie, was CrashPlan zuletzt gesichert hat und ob dies immer wieder passiert. jwd630 vor 7 Jahren 0