在 CentOS 编译 Java(或编译大项目)时内存不足,通常表现为:
javac 报 OutOfMemoryErrormvn / gradle 编译卡死或失败cc1plus / gcc 被 kill(OOM)free -h 看到内存或 swap 不够下面按 常见场景 + 解决方案 给你一套实用排查与解决办法。
free -h
重点看:
Mem 的 availableSwap 是否几乎为 0再看系统日志:
dmesg | tail -50
如果看到类似:
Out of memory: Kill process xxx (java)
✅ 确定是内存不足
java.lang.OutOfMemoryError: Java heap space
设置 JVM 参数:
export MAVEN_OPTS="-Xms512m -Xmx2g"
mvn clean package
或临时指定:
mvn -Xmx2g clean package
export GRADLE_OPTS="-Xmx2g"
或修改 gradle.properties:
org.gradle.jvmargs=-Xmx2g
建议:
- 小项目:1–2G
- 大项目:2–4G
javac -J-Xmx2g *.java
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h
你应该能看到 swap 增大了。
sudo swapoff /swapfile
sudo rm /swapfile
✅ 这是 CentOS 编译内存不足时最常用、最有效方案
mvn -T 1 clean package
gradle --parallel=false
或限制线程数:
gradle --max-workers=1
gcc: fatal error: Killed signal terminated program cc1plus
make JOBS=1
--disable-warnings-as-errors
sysctl vm.overcommit_memory=1
临时生效,重启失效。
echo -1000 > /proc/$(pidof java)/oom_score_adj
| 内存 | 建议 |
|---|---|
| 1G | 必须加 swap + 单线程 |
| 2G | swap 2–4G |
| 4G+ | 基本无压力 |
free -h
dmesg | tail
top
然后:
如果你愿意,可以把 具体报错信息 / 编译方式(maven / gradle / jdk) / 服务器配置 发出来,我可以直接给你一套 精确参数。