J'ai un traitement par lots qui convertit WAV en MP3 séquentiellement. Le problème est qu'après quelques milliers, il y a trop de fichiers ouverts, et il se heurte à la limite du fichier.Comment tester le problème "Trop de fichiers ouverts"
La raison pour laquelle le fait est à cause du code dans SystemCommandTasklet:
FutureTask<Integer> systemCommandTask = new FutureTask<Integer>(new Callable<Integer>() {
public Integer call() throws Exception {
Process process = Runtime.getRuntime().exec(command, environmentParams, workingDirectory);
return process.waitFor();
}
});
Cela a pour effet secondaire méchant de me faire compte sur la machine virtuelle Java pour nettoyer les processus, en laissant les fichiers ouverts et tels.
Je l'ai réécrit pour être ainsi:
FutureTask<Integer> systemCommandTask = new FutureTask<Integer>(new Callable<Integer>() {
public Integer call() throws Exception {
Process process = Runtime.getRuntime().exec(command, environmentParams, workingDirectory);
int status = process.waitFor();
process.getErrorStream().close();
process.getInputStream().close();
process.getOutputStream().flush();
process.getOutputStream().close();
process.destroy();
return status;
}
});
Je suis certain à 95% que cela fonctionne sur mon Mac (grâce à lsof), mais comment puis-je faire un test approprié qui fonctionnera sur n'importe quel système pour PROUVER que ce que j'essaye de faire fonctionne réellement?
Mon problème actuel est que la N semble être infini sur ma machine dev. –
Si vous ne pouvez pas reproduire le problème sur votre système, vous avez besoin d'un système qui permet de reproduire le problème pour l'exécution du test. Ou une vérification si un fichier est réellement ouvert, mais je suppose que sur votre système, aucun fichier n'est laissé ouvert alors cela ne fonctionnerait pas non plus. –