温馨提示×

centos java编译内存不足咋办

小樊
47
2026-09-18 11:01:38
栏目: 编程语言

在 CentOS 上用 javac 或 Java 相关构建工具(Maven / Gradle)编译时提示内存不足(OutOfMemoryError / 编译卡死 / 被 kill),常见原因和解决办法如下:


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

free -h
top

如果 available 很少,或者编译时 java 进程被 OOM Killer 杀掉(看 /var/log/messages 或 dmesg):

dmesg | grep -i oom

那就是系统内存不足。


二、javac 编译内存不足(较少见)

javac 本身一般不太吃内存,但大项目可能不够。

解决方式

  1. 加大 javac 堆内存
export JAVAC_OPTS="-J-Xmx2g"
javac $JAVAC_OPTS ...
  1. 减少并行编译
make -j1
# 或 maven 单线程

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

Maven 默认 JVM 内存较小。

方法 1:设置 MAVEN_OPTS

export MAVEN_OPTS="-Xmx2g -Xms1g -XX:MaxMetaspaceSize=512m"
mvn clean package

永久生效可写入:

vi ~/.bashrc
export MAVEN_OPTS="-Xmx2g -Xms1g"
source ~/.bashrc

方法 2:减少 Maven 并行度

mvn -T1 clean package

四、Gradle 编译内存不足

Gradle 很吃内存。

修改 gradle.properties

vi ~/.gradle/gradle.properties

加入:

org.gradle.jvmargs=-Xmx2g -Xms1g -XX:MaxMetaspaceSize=512m
org.gradle.parallel=false

五、CentOS 系统层面优化

1. 增加 Swap(非常有效)

CentOS 没有 swap 时很容易 OOM:

# 创建 4G swap
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
sudo mkswap /swapfile
sudo swapon /swapfile

# 开机自动挂载
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

查看:

free -h

2. 限制其他进程占用

编译时关闭:

  • MySQL
  • Redis
  • Docker 容器
  • Nginx(非必须)

六、常见推荐配置(参考)

场景 建议
小项目 -Xmx1g
中大型 -Xmx2g~4g
服务器 4G 加 swap + -Xmx2g
服务器 2G 必须加 swap

七、快速排查顺序(建议)

  1. free -h 看内存
  2. dmesg | grep oom
  3. 设置 MAVEN_OPTS / gradle.properties
  4. 加 swap
  5. 降低并行度

如果你能告诉我:

  • CentOS 版本
  • 内存大小
  • 用的是 Maven / Gradle / 直接 javac
  • 具体报错信息

我可以给你精确参数配置。

0 踩