在 CentOS 上编译 Java(或使用 Maven/Gradle 编译 Java 项目)时遇到内存不足(OutOfMemoryError / 编译卡死 / 被 kill),可以从以下几个方面排查和解决。
报错类似:
java.lang.OutOfMemoryError: Java heap space
或
GC overhead limit exceeded
dmesg | grep -i kill
出现 Out of memory: Kill process xxx (java)
export MAVEN_OPTS="-Xms512m -Xmx2048m"
mvn clean package
或:
mvn -Xmx2048m clean package
export GRADLE_OPTS="-Xmx2048m -XX:MaxMetaspaceSize=512m"
或在 gradle.properties:
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
javac -J-Xmx1024m *.java
mvn -T 1 clean package
org.gradle.parallel=false
mvn -pl module-a -am install
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
-Xlog:gc*:file=gc.log
free -h
top
dd if=/dev/zero of=/swapfile bs=1M count=2048
mkswap /swapfile
swapon /swapfile
持久化:
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
ps aux --sort=-%mem
一般不会直接导致 OOM,但可检查:
getenforce
如果是容器中编译:
cat /sys/fs/cgroup/memory/memory.limit_in_bytes
需要提升容器内存限制。
4G 内存服务器:
export MAVEN_OPTS="-Xms512m -Xmx2048m -XX:MaxMetaspaceSize=512m"
2G 内存服务器:
export MAVEN_OPTS="-Xms256m -Xmx1024m"
如果你能贴出:
我可以给你更精确的配置建议。