在 Debian 上编译 Java 程序时遇到内存不足(OOM,OutOfMemoryError),通常不是系统物理内存不够,而是 JVM 或构建工具(Maven / Gradle)默认分配的内存过大或不合理。下面按常见场景给你一套排查与解决方案。
如果你用的是 mvn compile / package
export MAVEN_OPTS="-Xms256m -Xmx512m"
mvn clean package
在 ~/.bashrc 或 ~/.profile 里加:
export MAVEN_OPTS="-Xms256m -Xmx512m"
如果你用的是 Gradle
export GRADLE_OPTS="-Xms256m -Xmx512m"
gradle.propertiesorg.gradle.jvmargs=-Xms256m -Xmx512m
并行编译非常吃内存。
mvn -T 1 clean package
org.gradle.parallel=false
Debian 默认可能没开 swap。
free -h
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
如果你是直接用 javac:
java -Xms128m -Xmx256m ...
如果是在容器里编译:
docker run -m 2g ...
export MAVEN_OPTS="-Xms128m -Xmx256m"
| 环境 | 建议 JVM 内存 |
|---|---|
| 1–2G 内存服务器 | -Xmx256m |
| 2–4G | -Xmx512m |
| 4G+ | -Xmx1g |
dmesg | grep -i oom
journalctl -k | grep -i oom
Debian 编译 Java 内存不足,90% 是 Maven / Gradle 默认堆太大,限制
-Xmx+ 减少并行 + 开 swap 基本都能解决。
如果你愿意,可以把:
发出来,我可以给你一个精确配置方案。