java.io.IOException: error=11

У меня странная проблема с Java ProcessBuilder. Код показан ниже (в немного упрощенном виде)

public class Whatever implements Runnable
{

public void run(){
        //someIdentifier is a randomly generated string
        String in = someIdentifier + "input.txt";
        String out = someIdentifier + "output.txt";
        ProcessBuilder builder = new ProcessBuilder("./whateveer.sh", in, out);
        try {
            Process process = builder.start();
            process.waitFor();
        } catch (IOException e) {
            log.error("Could not launch process. Command: " + builder.command(), e);
        } catch (InterruptedException ex) {
            log.error(ex);
        }
}

}

whatever.sh читает:

R --slave --args $1 $2 <whatever1.R >> r.log    

Загрузка экземпляров Whatever передается на ExecutorService фиксированного размера (35). Остальная часть приложения ждет, пока все они завершатся - это реализовано с помощью CountdownLatch. Все работает нормально в течение нескольких часов (Scientific Linux 5.0, java версии "1.6.0_24"), после чего возникает следующее исключение:

java.io.IOException: Cannot run program "./whatever.sh": java.io.IOException: error=11, Resource temporarily unavailable
    at java.lang.ProcessBuilder.start(Unknown Source)
... rest of stack trace omitted...

Есть ли у кого-нибудь идеи, что это значит? Судя по результатам поиска google/bing для java.io.IOException: error=11, это не самое распространенное исключение, и я совершенно озадачен.

Мое дикое и не очень обоснованное предположение заключается в том, что у меня слишком много потоков, пытающихся запустить один и тот же файл в одно и то же время. Однако, чтобы воспроизвести эту проблему, требуются часы процессорного времени, поэтому я не пробовал с меньшим числом.

Любые предложения будут высоко оценены.

7
задан stacker 5 December 2011 в 10:47
поделиться