[Java] Was tun, wenn aufgrund von FileNotFoundException viel "Datei wird zu oft geöffnet" angezeigt wird?

Umgebung

Veranstaltung

Viele FileNotFoundExceptions mit der Meldung "Datei wird zu oft geöffnet" werden im Fehlerprotokoll angezeigt.

Caused by: java.io.FileNotFoundException: /user/local/apache-tomcat-8/**/sample/WEB-INF/**/sample.jar (Die Datei ist zu viel geöffnet)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:225)
        at java.util.zip.ZipFile.<init>(ZipFile.java:155)
        at java.util.jar.JarFile.<init>(JarFile.java:166)
        at java.util.jar.JarFile.<init>(JarFile.java:103)
・
・
 (Kürzung)
・
・
Caused by: java.io.FileNotFoundException: /user/local/apache-tomcat-8/**/sample/WEB-INF/**/sample.jar (Die Datei ist zu viel geöffnet)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:225)
        at java.util.zip.ZipFile.<init>(ZipFile.java:155)
        at java.util.jar.JarFile.<init>(JarFile.java:166)
        at java.util.jar.JarFile.<init>(JarFile.java:103)

Ursache

Wenn Sie ProcessBuilder verwenden, werden InputStream, OutputStream und ErrorStream ohne Erlaubnis im Hintergrund geöffnet, sodass Ihnen anscheinend die Ressourcen ausgehen, wenn Sie nicht alle Streams schließen.

package sample;

import java.io.IOException;

public class ProcessExecutor {
  
 	public void execute(String... command) throws IOException {
  		ProcessBuilder processBuilder = new ProcessBuilder(command);
  		Process process = processBuilder.start();
  		process.waitFor();
  		process.destroy();
 	}
}

Problemumgehung

Der Fehler wurde behoben, indem allen Streams ein enger Prozess hinzugefügt wurde, wie unten gezeigt.

package sample;

import java.io.IOException;

public class ProcessExecutor {
  
 	public void execute(String... command) throws IOException {
  		ProcessBuilder processBuilder = new ProcessBuilder(command);
  		Process process = processBuilder.start();
  		process.waitFor();
  		
  		//Später hinzugefügt
  		process.getInputStream().close();
  		process.getOutputStream().close();
  		process.getErrorStream().close();
  		process.destroy();
 	}
}

Referenzzusammenfassung

Recommended Posts

[Java] Was tun, wenn aufgrund von FileNotFoundException viel "Datei wird zu oft geöffnet" angezeigt wird?
Was tun, wenn FacesMessage festgelegt, aber nicht angezeigt wird?
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Was tun, wenn die Befehlszeile zu lang ist? Wird beim Erstellen eines Gradle-Projekts in Intellij IDEA angezeigt
Was tun, wenn in bind.pry eine falsche Anzahl von Argumenten angezeigt wird?
Was tun, wenn beim Versuch, Eclipse unter Java 9 auszuführen, ein NoClassDefFoundError angezeigt wird?
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?
Was tun, wenn in GlassFish eine java.io.IOException auftritt?
Road to Java Engineer Part2 Was für eine Sprache ist Java?
Was tun, wenn mysql2 einen Bundle-Installationsfehler erhält?
Was ist eine JAR-Datei?
Was ist eine Java-Sammlung?
Was ist mit dem Fehler "Kann nicht gelesen werden oder ist keine gültige ZIP-Datei?" Zu tun
Was tun, wenn javax.el.ELException: Kein gültiger Methodenausdruck: wird angezeigt, wenn der JSF-Bildschirm angezeigt wird
[Ubuntu 20.04] Was tun, wenn der externe Monitor nicht erkannt wird?
Was tun, wenn in Docker ein gcc-Fehler auftritt?
Was tun, wenn Cloud 9 im Rails-Lernprogramm voll ist?
Hinweise, was zu tun ist, wenn das Eclipse Maven-Abhängigkeitsglas nicht korrekt ist
Was tun, wenn Sie mit Reißverschluss sterben, wenn Sie Pom haben, wenn Sie ein ausführbares Glas mit Gradle erstellen?
Was ist ein Lambda-Ausdruck (Java)
[Rails / Docker] Was tun, wenn der Browser (localhost: 3000) nach dem Hinzufügen eines Edelsteins den Zugriff verweigert?
[Gradle] [checkstyle] Was tun, wenn die aktive Einstellung von Checkstyle durch "Gradle-Projekt aktualisieren" aus Eclipse entfernt wird?
Was tun, wenn beim Erstellen einer JAR-Datei mit Abhängigkeiten in einem Maven-Projekt die Meldung "Es gibt kein Hauptmanifestattribut" angezeigt wird?
Was tun, wenn Sie in Thymeleaf Layout eine groovige Warnung erhalten?
Was tun, wenn das Hintergrundbild nach der Bereitstellung nicht angewendet wird?
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Was tun, wenn nach der Installation von npm "npm ERR! Code ENOSELF" angezeigt wird?
Anmerkung: [Java] Wenn sich eine Datei im überwachten Verzeichnis befindet, verarbeiten Sie sie.
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
Was tun, wenn der Tomcat-Prozess bestehen bleibt, wenn Sie Tomcat in Eclipse stoppen?
Was tun, wenn auf GitHub eine MiniMagick-Sicherheitsanfälligkeitswarnung angezeigt wird?
[Schienen] Was tun, wenn das Refile-Bild beim Schreiben der Verarbeitung zum Zeitpunkt des Routing-Fehlers nicht angezeigt wird?
Was tun, wenn Sie die Mastertabelle nach dem Importieren eines Projekts in Eclipse nicht in einer Datei speichern konnten?
Ein Amateurprogrammierer, der Java nicht mag, versucht "10 Fragen zu lösen, um festzustellen, ob er ein Java-Programmierer ist".
Was ist eine Spring Boot-Originaldatei?
Was tun, wenn eine javax.el.PropertyNotWritableException auftritt?
Was ist das beste Lesen von Dateien (Java)
Was ist eine Klasse in der Java-Sprache (2 /?)
Was tun, wenn die Änderungen nicht in der JAR-Manifestdatei berücksichtigt werden?
Volume, das viele logische Operatoren in der if-Anweisung verwenden möchte
Was tun, wenn Sie Java für OS X unter macOS installiert haben?
wildflly10 java8 ERROR [org.jboss.jca.core.tx.jbossts.XAResourceRecoveryImpl] (Periodische Wiederherstellung) IJ000906 Was tun, wenn ein Fehler auftritt?
[Spring Boot] Wenn Sie Spring Boot verwenden, war es praktisch, viele Dienstprogramme zu verwenden.
Androd: Was tun gegen "The Realm befindet sich bereits in einer Schreibtransaktion in"
Was zu tun ist, wenn es ungültig ist, weil es nicht mit einem '-' beginnt
[Ubuntu] Was tun, wenn MongoDB aufgrund eines SocketException-Fehlers nicht gestartet werden kann?
Was tun, wenn beim Hochladen mit App Store Connect zu viele Symboldateien an die Wand stoßen?
Auch wenn ich den Inhalt eines Datenobjekts in Java in JSON konvertieren möchte, gibt es einen Zirkelverweis ...
[Java] Was tun, wenn sich der in der Datenbank gespeicherte Inhalt und der Name der Aufzählung in der Aufzählung unterscheiden, die die Definition der Datenbank widerspiegelt?
[Lösung] Was tun, wenn ein Docker-Fehler angezeigt wird? FEHLER: Unter Unix: ///var/run/docker.sock kann keine Verbindung zum Docker-Dämon hergestellt werden. Wird der Docker-Dämon ausgeführt?