在 Debian 上运行 Tomcat 出现内存溢出(OutOfMemoryError),通常不是 Debian 本身的问题,而是 JVM / Tomcat / 应用 的配置或代码问题。下面按常见原因系统地说明。
java.lang.OutOfMemoryError: Java heap space
原因
-Xmx 设置太小解决
# 修改 Tomcat 启动参数
export CATALINA_OPTS="-Xms512m -Xmx1024m"
或(systemd 方式):
systemctl edit tomcat9
[Service]
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M"
OutOfMemoryError: Metaspace
原因
解决
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
OutOfMemoryError: unable to create new native thread
原因
解决
# 查看限制
ulimit -u
# 修改
/etc/security/limits.conf
tomcat soft nproc 4096
tomcat hard nproc 8192
OutOfMemoryError: Direct buffer memory
原因
-XX:MaxDirectMemorySize 太小| 安装方式 | 配置位置 |
|---|---|
| apt 安装 | /etc/default/tomcat9 |
| 二进制包 | bin/catalina.sh |
| systemd | systemctl edit tomcat* |
Debian 若没有 swap:
free -m
可能触发系统杀进程(不是 JVM 报错)
systemctl show tomcat9 | grep Memory
若有限制:
[Service]
MemoryLimit=2G
/var/log/tomcat9/catalina.out
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/tomcat9/
✅ 配置问题(80%)
✅ 代码内存泄漏(15%)
✅ 系统限制(5%)
如果你愿意,可以告诉我:
我可以帮你精确定位并给出配置方案。