在 Debian 上编译 Java(如 OpenJDK 或使用 Maven/Gradle 编译 Java 项目)时遇到内存不足(OutOfMemoryError / 编译卡死 / 被 OOM Killer 杀掉),可以从以下几个方面解决。
free -h
top
dmesg | grep -i oom
如果看到 Out of memory: Killed process ... 基本就是内存不够。
在 configure 阶段指定:
./configure --with-jvm-heap-size=2048
或设置环境变量:
export BOOT_JAVA_OPTIONS="-Xmx2g"
编译时:
make JOBS=1
修改 ~/.mavenrc 或环境变量:
export MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m"
或临时:
mvn -Xmx2g clean package
修改 gradle.properties:
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m
make JOBS=1
# 或
make -j1
mvn -T1 clean package
./gradlew --max-workers=1
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
⚠️ Swap 很慢,但能避免直接 OOM
systemctl stop nginx
systemctl stop mysql
systemctl stop docker
或只保留 SSH。
java -version
确保是 64-Bit。
make -j$(nproc)--disable-warnings-as-errors./configure --disable-warnings-as-errors
make JOBS=1
如果你能告诉我:
我可以给你更精确的命令。