在 Debian 上运行 Tomcat 时出现内存溢出(OutOfMemoryError),通常不是 Debian 本身的问题,而是 JVM / Tomcat / 应用 的配置或使用方式导致的。下面从常见原因到排查方法系统说明。
Tomcat 报错通常长这样:
java.lang.OutOfMemoryError: Java heap spacejava.lang.OutOfMemoryError: Metaspacejava.lang.OutOfMemoryError: GC overhead limit exceededjava.lang.OutOfMemoryError: Unable to create new native thread不同类型原因不同。
Debian 上通过 apt 安装的 Tomcat:
-Xms -Xmx✅ 表现:
✅ 解决: 编辑 Tomcat 环境变量(推荐方式):
sudo vim /etc/default/tomcat9
添加或修改:
JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
重启:
sudo systemctl restart tomcat9
如果是手动安装,改
bin/setenv.sh
常见问题:
✅ 表现:
✅ 排查:
jmap -histo:live <pid> | head
或生成 heap dump:
jmap -dump:format=b,file=heap.hprof <pid>
用 MAT / VisualVM 分析。
常见于:
✅ 报错:
OutOfMemoryError: Metaspace
✅ 解决:
-XX:MaxMetaspaceSize=256m
并减少不必要的 reload。
Debian 使用 systemd,可能限制:
systemctl status tomcat9
查看:
Tasks: 100 (limit: 100)
✅ 解决:
sudo systemctl edit tomcat9
[Service]
TasksMax=512
云服务器 / 容器常见:
✅ 解决:
/tmp 满✅ 检查:
df -h
du -sh /var/log/tomcat9
ps -ef | grep tomcat
free -h
systemctl show tomcat9 | grep Limit
JAVA_OPTS="
-Xms512m
-Xmx1024m
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/tomcat9/heap.hprof
"
如果你愿意,可以贴:
ps -ef | grep java 输出我可以帮你精准定位是哪一类 OOM。