IOException: Zbyt wiele otwartych plików

Próbuję debugować wyciek deskryptora pliku w aplikacji WWW Java uruchomionej w systemie Jetty 7.0.1 w systemie Linux.

Aplikacja działała szczęśliwie przez około miesiąc, gdy żądania zaczęły zawodzić z powoduzbyt wiele otwartych plikówi Jetty trzeba było ponownie uruchomić.

java.io.IOException: Cannot run program [external program]: java.io.IOException: error=24, Too many open files
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
    at java.lang.Runtime.exec(Runtime.java:593)
    at org.apache.commons.exec.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:58)
    at org.apache.commons.exec.DefaultExecutor.launch(DefaultExecutor.java:246)

Na początku myślałem, że problem dotyczy kodu, który uruchamia zewnętrzny program, ale używacommons-exec i nie widzę w tym nic złego:

CommandLine command = new CommandLine("/path/to/command")
    .addArgument("...");
ByteArrayOutputStream errorBuffer = new ByteArrayOutputStream();
Executor executor = new DefaultExecutor();
executor.setWatchdog(new ExecuteWatchdog(PROCESS_TIMEOUT));
executor.setStreamHandler(new PumpStreamHandler(null, errorBuffer));
try {
    executor.execute(command);
} catch (ExecuteException executeException) {
    if (executeException.getExitValue() == EXIT_CODE_TIMEOUT) {
        throw new MyCommandException("timeout");
    } else {
        throw new MyCommandException(errorBuffer.toString("UTF-8"));
    }
}

Wyświetlanie otwartych plików na serwerze Widzę dużą liczbę FIFO:

# lsof -u jetty
...
java    524 jetty  218w  FIFO        0,6      0t0 19404236 pipe
java    524 jetty  219r  FIFO        0,6      0t0 19404008 pipe
java    524 jetty  220r  FIFO        0,6      0t0 19404237 pipe
java    524 jetty  222r  FIFO        0,6      0t0 19404238 pipe

kiedy zaczyna się Jetty, jest tylko 10 FIFO, po kilku dniach są ich setki.

Wiem, że na tym etapie jest to trochę niejasne, ale czy masz jakieś sugestie, gdzie szukać dalej, lub jak uzyskać bardziej szczegółowe informacje na temat tych deskryptorów plików?

questionAnswers(7)

yourAnswerToTheQuestion