在 Ubuntu 上运行 Java 程序时提示内存不足(OutOfMemoryError / 被系统 kill),可以按下面步骤排查和解决。
典型错误:
java.lang.OutOfMemoryError: Java heap space
说明:JVM 堆内存设置太小。
✅ 解决:增大堆内存
java -Xms512m -Xmx2g -jar yourapp.jar
-Xms:初始堆-Xmx:最大堆(重要)现象:
dmesg 中有:Out of memory: Kill process xxxx (java)
说明:系统物理内存 + Swap 不够。
✅ 查看系统日志:
dmesg | grep -i oom
free -h
top
htop
如果没 Swap 或太小:
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
systemctl list-units --type=service
java -Xmx2g -XX:MaxRAM=3g -jar app.jar
java -Xmx2g -XX:+UseG1GC -jar app.jar
如果是 Docker:
java -XX:+UseContainerSupport -XX:MaxRAMPercentage=75 -jar app.jar
内存不足也可能是代码问题:
✅ 排查工具:
jstat -gc <pid>
jmap -heap <pid>
jstack <pid>
生成堆转储:
jmap -dump:format=b,file=heap.hprof <pid>
用 VisualVM / MAT 分析。
-Xmx 是否设置合理如果你愿意,可以告诉我:
我可以帮你给一套精准配置。