为什么我从Hudson得到这个java.io.ioexception“无法分配内存”?

时间:2010-07-13 17:00:33

标签: java memory-management hudson hudson-plugins

以下是我认为相关的错误消息:

Caused by: java.io.IOException: Cannot run program "/usr/bin/git" (in directory "/var/lib/hudson/jobs/Goals/workspace"): java.io.IOException: error=12, Cannot allocate memory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:474)
    at hudson.Proc$LocalProc.<init>(Proc.java:192)
    at hudson.Proc$LocalProc.<init>(Proc.java:164)
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:638)
    at hudson.Launcher$ProcStarter.start(Launcher.java:273)
    at hudson.Launcher$ProcStarter.join(Launcher.java:280)
    at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:319)
    ... 15 more
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)
    ... 21 more

您还可以在此处查看Hudson的完整输出:http://hudson.pastebin.com/KLSNrY1D

有什么想法吗?我怎么能阻止这种情况发生?我不是Java开发人员,所以我不太了解这里发生了什么。我必须完全重新启动Hudson以解决问题,但显然这不是最好的答案。

3 个答案:

答案 0 :(得分:3)

听起来你已经耗尽了盒子上的交换空间。

java.lang.ProcessBuilder.start()最终必须归结为类Unix操作系统上的fork或clone系统调用,以创建一个新进程。这需要交换空间。你似乎没有足够的。这在Unix系统管理领域更多,而不是Java。

答案 1 :(得分:2)

对我来说:

echo 0 > /proc/sys/vm/overcommit_memory

解决了这个问题。

答案 2 :(得分:1)

您一次运行多少外部程序?有多少哈德森建筑商等?当这种情况发生时,“免费”会说什么?

您可能只是遇到了系统内存不足的哈德逊进程可用的内存。