在 Debian 上运行 Tomcat 时,如果出现内存溢出(OutOfMemoryError),通常需要从以下几个地方排查日志。
路径一般在:
/var/log/tomcat9/catalina.out
# 或
/opt/tomcat/logs/catalina.out
查看内存溢出信息:
grep -i "OutOfMemory" /var/log/tomcat9/catalina.out
典型错误示例:
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: GC overhead limit exceeded
java.lang.OutOfMemoryError: Metaspace
java.lang.OutOfMemoryError: unable to create new native thread
/var/log/tomcat9/catalina.2026-01-21.log
作用:记录 Tomcat 启动、关闭、异常信息。
/var/log/tomcat9/localhost.2026-01-21.log
作用:Web 应用级别异常(如 Servlet、Listener 错误)。
journalctl -u tomcat9
或实时查看:
journalctl -u tomcat9 -f
/var/log/syslog
可能看到:
搜索:
grep -i "out of memory" /var/log/syslog
grep -i "killed process" /var/log/syslog
编辑 Tomcat 的 JVM 配置(Debian 通常在):
/etc/default/tomcat9
或
/etc/tomcat9/tomcat9.conf
添加:
JAVA_OPTS="-Xms512m -Xmx1024m \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/var/log/tomcat9/heapdump.hprof"
重启 Tomcat:
systemctl restart tomcat9
jmap -dump:live,format=b,file=/tmp/tomcat.hprof <pid>
| 类型 | 原因 | 解决 |
|---|---|---|
| Java heap space | 堆内存不足 | 增大 -Xmx |
| Metaspace | 类加载过多 | 增大 -XX:MaxMetaspaceSize |
| GC overhead | 频繁 GC | 优化代码 / 增大内存 |
| native thread | 线程过多 | 限制线程数 |
# 查看 Tomcat 进程内存
ps aux | grep tomcat
# 查看 JVM 内存
jstat -gc <pid>
# 查看线程数
ps -eLf | grep <pid> | wc -l
如果你愿意,可以把 catalina.out 中的 OutOfMemoryError 片段 或 Tomcat 版本 发给我,我可以帮你精确判断是堆、元空间还是线程问题。