2011-10-19 25 views
1

Java函數moveFile使用本地移動命令將輸出報告文件移至就緒目錄。它工作得很好,但現在它開始拋出以下磁盤空間異常。但是當我檢查磁盤空間時,目錄中有很多可用的sace,並且我也進行了清理。我試圖重新運行它,但仍然收到以下錯誤。不知道是什麼問題。本地移動命令 - 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文件系統中。輸出目錄在設置爲/ nan/out目錄的環境變量$ CUSTOM_OUT中定義。在java程序中,它被檢索並存儲在outfile公共變量中。我將CUSTOM_OUT變量更改爲位於不同文件系統上的主目錄,創建了所需的目錄並運行它,但仍得到相同的錯誤。 – Arav

回答

4

的「沒有足夠空間」的錯誤是不是指磁盤空間,它試圖叉執行過程時的引薦到內存。

分叉時,臨時性地複製Java進程的內存,並且需要系統上有足夠的交換空間來同時存放父進程和子進程(在某個特定時間內,它具有與父進程相同的內存使用情況)很短的時間。如果你很快產生很多進程,你可能需要更多的內存。

當Java進程非常大時,如應用程序服務器,這可能是一個主要問題。

問題很好說明如下:

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

+0

非常感謝您的信息。堆大小的可選參數到java可執行文件被設置爲1GB,我改變它爲512M,它的工作。 -Xms512m -Xmx512m – Arav