【发布时间】:2009-07-14 11:20:00
【问题描述】:
在我的系统上,我无法运行启动进程的简单 Java 应用程序。我不知道如何解决。
你能给我一些提示如何解决吗?
程序是:
[root@newton sisma-acquirer]# cat prova.java
import java.io.IOException;
public class prova {
public static void main(String[] args) throws IOException {
Runtime.getRuntime().exec("ls");
}
}
结果是:
[root@newton sisma-acquirer]# javac prova.java && java -cp . prova
Exception in thread "main" java.io.IOException: Cannot run program "ls": java.io.IOException: error=12, Cannot allocate memory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:474)
at java.lang.Runtime.exec(Runtime.java:610)
at java.lang.Runtime.exec(Runtime.java:448)
at java.lang.Runtime.exec(Runtime.java:345)
at prova.main(prova.java:6)
Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:467)
... 4 more
系统配置:
[root@newton sisma-acquirer]# java -version
java version "1.6.0_0"
OpenJDK Runtime Environment (IcedTea6 1.5) (fedora-18.b16.fc10-i386)
OpenJDK Client VM (build 14.0-b15, mixed mode)
[root@newton sisma-acquirer]# cat /etc/fedora-release
Fedora release 10 (Cambridge)
编辑:解决方案 这解决了我的问题,我不知道为什么:
echo 0 > /proc/sys/vm/overcommit_memory
投票支持谁能解释 :)
附加信息,顶部输出:
top - 13:35:38 up 40 min, 2 users, load average: 0.43, 0.19, 0.12
Tasks: 129 total, 1 running, 128 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.5%us, 0.5%sy, 0.0%ni, 94.8%id, 3.2%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1033456k total, 587672k used, 445784k free, 51672k buffers
Swap: 2031608k total, 0k used, 2031608k free, 188108k cached
附加信息,免费输出:
[root@newton sisma-acquirer]# free
total used free shared buffers cached
Mem: 1033456 588548 444908 0 51704 188292
-/+ buffers/cache: 348552 684904
Swap: 2031608 0 2031608
【问题讨论】:
-
这要么是 linux 版本中的错误,要么是您有一些权限问题。您可以查看源代码中的 UnixProcess:164 以了解它尝试分配的内容。
-
你可以随时试试sun jdk
-
我发布了一个免费库的链接,可以解决您的问题,但版主删除了我的答案,没有任何解释。为了社区的利益,我再次尝试评论:Yajsw 解决了您的内存问题,它在 Linux 上使用对 C 库的调用来创建进程。在这里阅读:sourceforge.net/projects/yajsw/forums/forum/810311/topic/…
-
我在 openjdk 上遇到过这种情况,在我用官方的 sun jdk 替换它之后,fork 工作正常...如果你不想替换 openjdk,'overcommit_memory' hack 也可以
标签: java runtime.exec