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);
}
}
}
what.sh の読み取り:
R --slave --args $1 $2 <whatever1.R >> r.log
のインスタンスのロードは、固定サイズ (35) の にWhatever
送信されます。ExecutorService
アプリケーションの残りの部分は、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
、これは最も一般的な例外ではなく、完全に困惑しています。
あまりにも多くのスレッドが同時に同じファイルを起動しようとしているというのは、私のワイルドであまり知識のない推測です。ただし、問題を再現するには数時間の CPU 時間がかかるため、これより少ない数値では試していません。
どんな提案でも大歓迎です。