温馨提示×

centosjava编译内存不足怎么办

小樊
38
2026-10-12 03:54:52
栏目: 编程语言

在 CentOS 上用 Java 编译(javac / Maven / Gradle) 时提示内存不足(OutOfMemoryError / GC overhead / 编译卡死),通常可以从下面几方面解决。


一、先确认是不是“系统内存真的不够”

free -h
top
  • 如果 物理内存 + Swap 都快满,那是系统级问题
  • 如果只是 Java 编译报 OOM,多半是 JVM 参数太小

二、javac 编译内存不足(直接用 javac)

1️⃣ 增大 javac 堆内存

javac -J-Xms512m -J-Xmx2048m *.java

说明:

  • -J 是把参数传给 JVM
  • -Xmx 最大堆内存(根据机器调整)

三、Maven 编译内存不足(最常见)

1️⃣ 设置 MAVEN_OPTS

export MAVEN_OPTS="-Xms512m -Xmx2048m -XX:MaxMetaspaceSize=512m"
mvn clean package

永久生效(推荐):

vi ~/.bashrc
export MAVEN_OPTS="-Xms512m -Xmx2048m"
source ~/.bashrc

2️⃣ 减少并行编译(防 OOM)

mvn -T 1C clean package

或

mvn -T 1 clean package

四、Gradle 编译内存不足

1️⃣ 修改 gradle.properties

org.gradle.jvmargs=-Xms512m -Xmx2048m -XX:MaxMetaspaceSize=512m
org.gradle.parallel=false

五、CentOS 没有 Swap 导致 OOM(很常见)

1️⃣ 查看是否有 swap

free -h
swapon -s

2️⃣ 添加 2G swap(示例)

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo mkswap /swapfile
sudo swapon /swapfile

开机自动挂载:

echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

六、编译大项目(代码极多)

✅ 推荐做法:

  • 减小并行度
  • 增大 -Xmx
  • 关闭注解处理器并行
  • Maven 使用:
mvn clean package -Dmaven.compiler.fork=true

七、典型推荐配置(4G 服务器)

-Xms512m
-Xmx2g
-XX:MaxMetaspaceSize=512m

八、常见错误对照

错误信息 原因
Java heap space 堆内存太小
GC overhead limit exceeded 内存不够 + 回收频繁
unable to create new native thread 线程数太多
Killed 系统 OOM Killer

如果你能告诉我:

  • ✅ CentOS 版本
  • ✅ 内存大小
  • ✅ 用的什么编译(javac / Maven / Gradle)
  • ✅ 报错完整信息

我可以直接帮你给出精确参数配置。

0 踩