Ich erhalte diese Ausnahme in Java:Zu viele offene Dateien: wie viele offen sind, was sie sind, und wie viele kann die JVM offen
java.io.FileNotFoundException: (Too many open files)
Ich bin für die Möglichkeiten suchen, diese zu beseitigen Problem.
Dieser Fehler weist offensichtlich darauf hin, dass JVM zu viele Handles zugewiesen hat, und das zugrunde liegende Betriebssystem wird es nicht mehr zulassen. Entweder lecke ich irgendwo mit nicht korrekt geschlossenen Verbindungen/Streams.
Dieser Prozess läuft für Tage non-stop und löst schließlich die Ausnahme aus. Es wiederholt sich nach 12-14 Tagen der Betriebszeit.
Wie bekämpft man das? Gibt es eine Möglichkeit, eine Liste der zugewiesenen Handles in JVM zu erhalten oder zu verfolgen, wenn ein bestimmter Wert erreicht wird? Ich würde gerne drucken lassen und sehen, wie es wächst und wann. Ich kann einen Profiler nicht verwenden, weil es ein Produktionssystem ist und Schwierigkeiten haben, es in der Entwicklung zu reproduzieren. Irgendein Vorschlag?
Ich überwache die freie Größe des Heapspeichers und hebe einen "Alarm" an, wenn er sich 1% des in -Xmx angegebenen Gesamtwerts nähert. Ich weiß auch, dass, wenn meine Thread-Anzahl über 500 steigt, etwas definitiv außer Kontrolle gerät. Nun, gibt es eine Möglichkeit zu wissen, dass meine JVM zu viele Griffe von OS zuweist und sie nicht zurück gibt, z. Steckdosen, geöffnete Dateien usw. Wenn ich das gewusst hätte, wüsste ich, wo und wann.
Können Sie mehr bieten Informationen über JVM und OS? Außerdem schlage ich vor, dass Sie mehr Mühe darauf verwenden, dies in einer Entwicklungsumgebung zu reproduzieren. Es kann ein Aufwand sein, aber wenn Sie ein solches Problem haben, wird der Versuch, auf einem Produktionssystem zu beobachten und zu berichten, wahrscheinlich länger dauern. – Timothy
Es passiert immer wieder auf Linux-Computern, die virtualisiert laufen, und wir haben keine Möglichkeit, dies zu reproduzieren, indem wir 2 Wochen schwere Tests durchführen. Ich habe das nicht auf Windows-Boxen passiert. Sie haben recht, am besten fangen Sie es in dev., Aber ich möchte auch einige Fähigkeiten in den Server selbst für die Selbstüberwachung für die Zukunft eingebettet haben. – Dima
RE Ihre Bearbeitung. Ich glaube nicht, dass die JVM Ihnen sagen kann, wie sich Dateien geöffnet haben. Das ist vielleicht eine nette Funktion, die Sun hinzufügen kann, aber bis dahin müssen Sie einen externen Prozess verwenden, um es Ihnen zu sagen. Wenn Sie es wirklich in der JVM benötigen, schreiben Sie einen Code, der lsof ausführt und das Ergebnis zurückgibt. Zusätzlich kann das Limit von offenen Dateien geändert werden. Unter Linux können Sie beispielsweise die Datei /etc/security/limits.conf ändern. – bramp