私が対処しなければならない 1 つのアプリケーションは、ProcessBuilder
. 理由は語られていませんが、基盤となる OS が 64 ビット (RHEL 5.x の価値がある) であっても、32 ビット JVM (Sun、1.6.0.25) で実行されます。
このアプリケーションはメモリを多用するため、ヒープ サイズは最大 3 GB に設定され、permgen は 128M です。
ただし... ランダムな瞬間に、シェル ヘルパーの起動に失敗します。OutOfMemory が原因ではなく、ENOMEM が原因です... これについて私が確認できる唯一の原因は、アドレス空間の不足です。
確かに、しかし同時に、メモリは実際には圧迫されておらずtop
、JVM とその仮想セットのサイズの実際のメモリ使用量は 3 GB でさえないことが報告されています...
のコードを見ることができるものProcess
を見ると、コア メソッドが呼び出されてforkAndExec()
いることがわかります。これは、ほとんど自明です...両方のシステムコールについて知っていることから、失敗するべきではありません。しかし、そうです。そして、常にではありません。
なんで?
編集:neo4jが使用されていることに注意してください。FileChannel を多用しているようですが、それがアドレス空間不足の原因でしょうか?