在 Debian 上遇到 Java 内存不足(OutOfMemoryError / 进程被 kill),通常从 JVM 参数、系统资源、进程限制 三方面排查和调整。下面按常见场景说明。
java.lang.OutOfMemoryError: Java heap spacejava.lang.OutOfMemoryError: Metaspacejava.lang.OutOfMemoryError: GC overhead limit exceededjava.lang.OutOfMemoryError: Unable to create new native threaddmesg | grep -i "killed process"
或
journalctl -xe | grep -i oom
如果是 OOM Killer 杀掉 Java,说明 系统整体内存不足。
java -Xms512m -Xmx2g -jar app.jar
说明:
-Xms:初始堆内存-Xmx:最大堆内存(最重要)⚠️ 不要超过物理内存的 70%~80%
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=512m
-Xss256k
jps
jinfo <pid>
free -h
htop
# 创建 2G swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
永久生效:
echo '/swapfile none swap sw 0 0' >> /etc/fstab
如果是 systemd 启动的 Java 服务:
sudo systemctl edit your-java.service
添加:
[Service]
MemoryLimit=4G
然后:
sudo systemctl daemon-reload
sudo systemctl restart your-java.service
ulimit -a
修改:
sudo vi /etc/security/limits.conf
例如:
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
编辑:
/etc/default/tomcat9
或
CATALINA_OPTS="-Xms512m -Xmx2g"
java -Xms1g -Xmx2g -jar app.jar
或环境变量:
JAVA_OPTS="-Xms1g -Xmx2g"
free -h 看内存dmesg | grep oom 看是否被系统杀-Xmxjstat -gc <pid> 看 GC如果你能贴出:
free -h 输出我可以给你 更精确的参数建议。