在 Debian 上运行 Tomcat 出现内存溢出(OutOfMemoryError),通常不是 Debian 本身的问题,而是 JVM / Tomcat / 应用 的配置或使用方式导致的。下面按常见原因系统说明。
错误示例:
java.lang.OutOfMemoryError: Java heap space
原因
Debian 上 Tomcat 默认堆大小
-Xms -Xmx✅ 解决:
# /etc/default/tomcat9 或 tomcat10
JAVA_OPTS="-Xms512m -Xmx1024m"
重启:
systemctl restart tomcat9
错误示例:
OutOfMemoryError: Metaspace
原因
✅ 解决:
JAVA_OPTS="-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
(Java 8 之前是 PermGen)
错误示例:
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 太小✅ 解决:
JAVA_OPTS="-XX:MaxDirectMemorySize=256m"
你改 catalina.sh 可能不生效
正确位置:
/etc/default/tomcat9
# 或
/etc/systemd/system/tomcat.service.d/*.conf
修改后:
systemctl daemon-reload
systemctl restart tomcat9
Debian 默认可能是:
不同版本 GC、默认参数不同,老应用容易出问题。
/var/log/tomcat9/catalina.out
JAVA_OPTS="-Xlog:gc*:file=/var/log/tomcat9/gc.log:time"
jmap -dump:live,format=b,file=heap.hprof <pid>
用 MAT / VisualVM 分析
Debian 上 Tomcat 内存溢出,90% 是因为没配置 JVM 内存参数 + 应用有内存泄漏
如果你愿意,可以贴:
我可以帮你精准分析是哪一种溢出。