2011-10-19 9 views
1

Java関数moveFileは、native moveコマンドを使用して出力レポートファイルを準備ディレクトリに移動します。以前はうまくいきましたが、現在は以下のディスクスペースの例外を投げ始めました。しかし、私がディスクスペースをチェックすると、ディレクトリ内にたくさんのsaceがあり、私もクリーンアップしました。私はそれを再実行しようとしましたが、私はまだ以下のエラーが表示されます。問題が何であるか分かりません。native moveコマンド - java関数

java.io.IOException: Cannot run program "mv": error=12, Not enough space 
     at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) 
     at java.lang.Runtime.exec(Runtime.java:593) 
     at java.lang.Runtime.exec(Runtime.java:431) 
     at java.lang.Runtime.exec(Runtime.java:328) 
     at powertel.usageExtract.ctfCompactExtract.moveFile(ctfCompactExtract.java:507) 
     at powertel.usageExtract.ctfCompactExtract.run(ctfCompactExtract.java:1189) 
Caused by: java.io.IOException: error=12, Not enough space 
     at java.lang.UNIXProcess.forkAndExec(Native Method) 
     at java.lang.UNIXProcess.<init>(UNIXProcess.java:53) 
     at java.lang.ProcessImpl.start(ProcessImpl.java:65) 
     at java.lang.ProcessBuilder.start(ProcessBuilder.java:452) 

プライベートINT MOVEFILE(INTのmoveTo){

ストリングRUNCMD = ""; プロセスp = null; int extVal = 0;プロセスを実行するためにフォークしようとしたとき

if (moveto == 1) { 
    runCmd = "mv "+ outfile + " " + localbaseDir+"/ctf/ready/"; 
} 
else { 
    runCmd = "mv "+ outfile + " " + localbaseDir+"/ctf/error/"; 
} 

try { 
    Runtime r = Runtime.getRuntime(); 
    p = r.exec(runCmd); 
    p.waitFor(); 
    extVal = p.exitValue(); 
    log.debug("Process exit value: " + extVal); 
} 
catch (IOException e) { 
    extVal = 1; 
    log.error("IO Exception - "+ e.getMessage()); 
    e.printStackTrace(); 
} 
catch (InterruptedException e1) { 
    extVal = 1; 
    log.error("Interrupted Exception - "+e1.getMessage()); 
} 

return extVal; 

}

+0

マシンのulimitの設定があり、わからないことは、場合に役立ちます。ファイルサイズは? また、ファイルパスセパレータを宣言するシステムプロパティは非常に便利です。そのことを考慮する必要があります。 – r0ast3d

+0

outfileとlocalbaseDirは同じファイルシステム(マウントポイント)にありますか? –

+0

準備完了、エラーディレクトリは同じnfsファイルシステムにあります。出力ディレクトリは環境変数$ CUSTOM_OUTに定義されています。これは/ nan/outディレクトリに設定されています。 Javaプログラムでは、それは検索され、outfile public変数に格納されます。 CUSTOM_OUT変数を別のファイルシステム上のホームディレクトリに変更し、必要なディレクトリを作成して実行しましたが、同じエラーが発生しています。 – Arav

答えて

4

「ではない十分なスペース」エラーは、ディスク領域を参照されていない、それはメモリを参照することです。

一時的にJavaプロセスのメモリがコピーされ、親プロセスと子プロセスの両方を保持するのに十分なスワップ領域が必要です(特定の時間は親プロセスと同じメモリ使用量を持ちます)短い時間です。たくさんのプロセスをすばやく作成する場合は、さらに多くのメモリが必要になる可能性があります。

これは、アプリケーションサーバーなど、Javaプロセスが非常に大きい場合に重大な問題になる可能性があります。

問題

がここにも記述されている:

https://wiki.jenkins-ci.org/display/JENKINS/IOException+Not+enough+space

+0

情報をありがとうございました。 java実行可能ファイルのオプション引数のヒープサイズは、以前は1GBに設定されていましたが、これを512Mに変更して動作させました。 -Xms512m -Xmx512m – Arav