在 Debian 上编译 Java 项目时遇到 内存不足(OOM / Java heap space),通常可以从 JVM 参数、系统资源、编译方式 三个方面来解决。下面按常见场景给你一套实用方案。
export JAVA_OPTS="-Xms512m -Xmx2g"
export MAVEN_OPTS="-Xms512m -Xmx2g"
export GRADLE_OPTS="-Xms512m -Xmx2g"
然后重新编译:
mvn clean package
# 或
gradle build
✅ 推荐配置(根据机器内存调整):
1g ~ 2g2g ~ 4g4g ~ 8gmvn -Xmx2g clean package
~/.mavenrcexport MAVEN_OPTS="-Xms512m -Xmx2g"
./gradlew -Dorg.gradle.jvmargs="-Xmx2g" build
gradle.propertiesorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m
free -h
htop
如果看到:
available 很小就说明是系统内存不够。
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
✅ 编译 Java 项目 强烈建议有 swap,即使内存够。
mvn -T 1 clean package
./gradlew --parallel=false build
或者限制并行线程:
org.gradle.parallel=false
某些 JDK(如 JDK 17+)默认占用更多内存。
查看当前 JDK:
java -version
如果是服务器,推荐:
javac 直接编译如果是小项目:
javac -J-Xmx1g *.java
如果是 Docker 里编译:
docker run -it --memory=4g --memory-swap=8g debian bash
CI(GitHub Actions / GitLab CI)也要加:
env:
JAVA_OPTS: "-Xmx2g"
| 排查项 | 命令 |
|---|---|
| 内存 | free -h |
| JVM 参数 | echo $JAVA_OPTS |
| 编译工具 | mvn -v / gradle -v |
| swap | swapon -s |
| 系统日志 | `dmesg |
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
export MAVEN_OPTS="-Xms1g -Xmx3g"
mvn clean package
如果你愿意,可以把 具体报错信息 / 编译工具 / Debian 版本 / 内存大小 发出来,我可以给你一个精确配置方案。