Java ProcessBuilder
で奇妙な問題が発生しました。 Whatever
のインスタンスのjava.io.IOException:error = 11
R --slave --args $1 $2 <whatever1.R >> r.log
荷重を固定サイズ(35)のExecutorService
に提出されている:コードは
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(やや簡略化した形で)を以下に示します。残りのアプリケーションはすべてが完了するのを待ってCountdownLatch
で実装されます。すべては、次の例外をスローする前に、数時間(科学の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...
誰もこれが何を意味するのかのアイデアを持っていますか? java.io.IOException: error=11
のgoogle/bing検索結果に基づいて、それは例外の最も一般的なものではなく、私は完全に困惑しています。
私は野生であり、教育を受けていないと思うので、同じファイルを同時に起動しようとするスレッドが多すぎます。しかし、問題を再現するには数時間のCPU時間がかかります。したがって、私は小さい数字で試していません。
ご意見をいただければ幸いです。
Javaプロセスの開いているファイルを 'lsof'でチェックしましたか? – lidaobing
errno 11または12か両方、あるいはその両方ですか? –
エラー= 11のみ – mbatchkarov