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