Jenkins构建了抛出内存不足的错误

时间:2015-06-25 04:57:27

标签: jenkins continuous-integration out-of-memory

我们让Jenkins在ec2实例上运行。在进行构建时,我们会看到以下错误:

17:29:39.149 [INFO] [org.gradle.api.Project] OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000007ac000000, 234881024, 0) failed; error='Cannot allocate memory' (errno=12)
17:29:39.150 [INFO] [org.gradle.api.Project] #

17:29:39.150 [INFO] [org.gradle.api.Project] # There is insufficient memory for the Java Runtime Environment to continue.

17:29:39.150 [INFO] [org.gradle.api.Project] # Native memory allocation (malloc) failed to allocate 234881024 bytes for committing reserved memory.

我研究了这个主题并尝试了各种设置,例如增加堆内存,ram和PermGenSize。这是我目前在Jenkins上的内存设置:

-Xms256m -Xmx2048m -XX:MaxPermSize=512m

我是否还有其他任何导致OOM的事情?

2 个答案:

答案 0 :(得分:13)

我卖了同样的问题。 (我有ec2,t2.micro,Ubuntu 14,Jenkins,Tomcat,Maven)。 默认情况下,您没有交换空间。 为了证实这一点:

free -m

只需添加一些。尝试使用1 GB开始。

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

再次检查:

free -m

有关详细信息,请查看here

答案 1 :(得分:6)

这不是JVM级别的内存问题,而是OS级别的内存问题。 JVM尝试分配224MB,但是这个内存量在操作系统级别上是不可用的。当JVM的-Xmx设置大于系统中的可用内存量时,会发生这种情况。检查操作系统中的可用内存量,并限制当前JVM的内存以使其适合可用内存,或者尝试释放内存(通过限制其他进程使用的内存量)或尝试EC2实例记忆力更强。