[Java] Que faire si un grand nombre de "Le fichier est trop ouvert" s'affiche en raison de FileNotFoundException

environnement

un événement

De nombreuses exceptions FileNotFoundExceptions indiquant «Le fichier est trop ouvert» sont affichées dans le journal des erreurs.

Caused by: java.io.FileNotFoundException: /user/local/apache-tomcat-8/**/sample/WEB-INF/**/sample.jar (Le fichier est trop ouvert)
        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)
・
・
 (réduction)
・
・
Caused by: java.io.FileNotFoundException: /user/local/apache-tomcat-8/**/sample/WEB-INF/**/sample.jar (Le fichier est trop ouvert)
        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)

Cause

Si vous utilisez ProcessBuilder, InputStream, OutputStream et ErrorStream seront ouverts sans autorisation en arrière-plan, il semble donc que vous manquerez de ressources à moins que vous ne fermiez tous les flux.

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();
 	}
}

solution de contournement

L'erreur a été résolue en ajoutant fermement un processus de fermeture à tous les flux, comme indiqué ci-dessous.

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();
  		
  		//Ajouté plus tard
  		process.getInputStream().close();
  		process.getOutputStream().close();
  		process.getErrorStream().close();
  		process.destroy();
 	}
}

Résumé de référence

Recommended Posts

[Java] Que faire si un grand nombre de "Le fichier est trop ouvert" s'affiche en raison de FileNotFoundException
Que faire si FacesMessage est défini mais pas affiché
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
Que faire si la ligne de commande est trop longue apparaît lors de la création d'un projet Gradle dans Intellij IDEA
Que faire si vous obtenez une erreur de nombre d'arguments erroné dans binding.pry
Que faire si vous obtenez une erreur NoClassDefFoundError lorsque vous essayez d'exécuter eclipse sur Java 9
[Rails] Que faire lorsque la vue se réduit lorsqu'un message est affiché avec la méthode des erreurs
Que faire lorsqu'une exception java.io.IOException se produit dans GlassFish
Road to Java Engineer Part2 Quel type de langage est Java?
Que faire si mysql2 obtient une erreur d'installation de bundle
Qu'est-ce qu'un fichier JAR?
Qu'est-ce qu'une collection Java?
Que faire à propos de l'erreur "Impossible de lire ou n'est pas un fichier ZIP valide"
Que faire lorsque javax.el.ELException: Pas une expression de méthode valide: s'affiche lorsque l'écran JSF est affiché
[Ubuntu 20.04] Que faire si le moniteur externe n'est pas reconnu
Que faire si vous obtenez une erreur gcc dans Docker
Que faire lorsque Cloud 9 est plein dans le didacticiel Rails
Remarques sur la marche à suivre si le Jar de dépendance Eclipse Maven est incorrect
Que faire si vous mourez avec zip si vous avez pom lors de la création d'un fichier exécutable avec gradle
Qu'est-ce qu'une expression lambda (Java)
[Rails / Docker] Que faire si l'accès est refusé par le navigateur (localhost: 3000) après l'ajout d'un gem
[Gradle] [checkstyle] Que faire si le paramètre actif de Checkstyle est supprimé par "Refresh Gradle project" d'Eclipse
Que faire si on vous dit "il n'y a pas d'attribut manifeste principal" lors de la création d'un fichier jar contenant des dépendances dans un projet maven
Que faire si vous obtenez un avertissement groovy dans Thymeleaf Layout
Que faire si l'image d'arrière-plan n'est pas appliquée après le déploiement
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Que faire lorsque "npm ERR! Code ENOSELF" s'affiche après l'installation de npm
Mémo: [Java] Si un fichier se trouve dans le répertoire surveillé, traitez-le.
Comment savoir quelle version Java d'un fichier de classe a été compilée
Que faire si le processus Tomcat reste lorsque vous arrêtez Tomcat dans Eclipse
Que faire si vous recevez une alerte de vulnérabilité MiniMagick sur GitHub
[Rails] Que faire lorsque l'image Refile n'est pas affichée lors de l'écriture du traitement au moment de l'erreur de routage
Que faire si vous obtenez Impossible d'enregistrer la table principale dans un fichier après l'importation d'un projet dans Eclipse
Un programmeur amateur qui n'aime pas beaucoup Java a essayé de résoudre "10 questions pour savoir s'il est un programmeur Java"
Qu'est-ce qu'un fichier .original Spring Boot?
Que faire lorsqu'une exception javax.el.PropertyNotWritableException se produit
Quelle est la meilleure lecture de fichier (Java)
Qu'est-ce qu'une classe en langage Java (2 /?)
Que faire si les modifications ne sont pas reflétées dans le fichier manifeste JAR
Volume qui souhaite utiliser de nombreux opérateurs logiques dans l'instruction if
Que faire si vous avez installé Java pour OS X sur macOS
wildflly10 java8 ERROR [org.jboss.jca.core.tx.jbossts.XAResourceRecoveryImpl] (récupération périodique) IJ000906 Que faire en cas d'erreur
[Spring Boot] Si vous utilisez Spring Boot, il était pratique d'utiliser de nombreux utilitaires.
Androd: Que faire à propos de "Le Royaume est déjà dans une transaction d'écriture dans"
Que faire quand est invalide car il ne commence pas par un "-"
[Ubuntu] Que faire lorsque MongoDB ne peut pas être démarré en raison d'une erreur SocketException
Que faire si vous frappez le mur de trop de fichiers de symboles lors du téléchargement avec App Store Connect
Même si je souhaite convertir le contenu d'un objet de données en JSON en Java, il existe une référence circulaire ...
[Java] Que faire si le contenu enregistré dans la base de données et le nom de l’énumération sont différents dans l’énumération qui reflète la définition de la base de données
[Solution] Que faire si vous obtenez une erreur Docker "ERREUR: Impossible de se connecter au démon Docker sous unix: ///var/run/docker.sock. Le démon docker est-il en cours d'exécution?"