java - 如何解决 "java.io.IOException: error=12, Cannot allocate memory"调用 Runtime#exec()?

标签 java runtime.exec

在我的系统上,我无法运行启动进程的简单 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

最佳答案

这是解决方案,但您必须设置:

echo 1 > /proc/sys/vm/overcommit_memory

关于java - 如何解决 "java.io.IOException: error=12, Cannot allocate memory"调用 Runtime#exec()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1124771/

相关文章:

java - 将 sshpass 与 bash 一起使用可以从命令行运行,而不是从 java exec 运行

java - 如何执行带参数的命令?

java - 使用 glassfish 服务器进行 struts2 session 维护

java - logback 找不到 LoginAuthenticator

java - Java 和 SQL 中的时间跨度?

java - 如何使用Eclipse JDT统计JDK中所有方法调用

java - 已使用不兼容格式定义的属性

java - 执行net use命令

Unix 上的 Java 执行

java - Windows 中带有非 ASCII 字符串的 Runtime.getRuntime().exec() ?