2011-10-19 24 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