要查找 Tomcat 内存溢出(OOM,OutOfMemoryError)日志,可以按下面几个方向来排查,基本都能找到原因。
catalina.out(最常用 ✅)这是 最关键的日志文件,内存溢出信息通常就在这里。
路径示例:
$TOMCAT_HOME/logs/catalina.out
查找 OOM 关键字:
grep -i "OutOfMemoryError" catalina.out
或实时查看:
tail -f catalina.out
典型 OOM 日志示例:
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
或
java.lang.OutOfMemoryError: Metaspace
catalina.yyyy-mm-dd.logTomcat 按日期生成的日志文件:
ls $TOMCAT_HOME/logs/catalina.*
查找:
grep -R "OutOfMemoryError" logs/
如果项目使用了 logback / log4j / log4j2,OOM 也可能出现在业务日志中。
常见路径:
logs/app.log
logs/error.log
logs/server.log
查找:
grep -i "OutOfMemoryError" logs/*.log
当 JVM 直接崩溃时,会生成 hs_err_pid 文件。
find / -name "hs_err_pid*.log" 2>/dev/null
常见位置:
/tmp示例:
hs_err_pid12345.log
里面会明确说明:
如果是 内存占用过大被操作系统杀掉,Tomcat 日志里可能看不到 OOM。
dmesg | grep -i java
或
grep -i "oom" /var/log/messages
grep -i "killed process" /var/log/messages
典型信息:
Out of memory: Kill process 12345 (java)
查看 Tomcat 启动参数:
ps -ef | grep tomcat
或:
jinfo <pid>
重点关注:
-Xms
-Xmx
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
✅ 第一步(最重要)
grep -R "OutOfMemoryError" $TOMCAT_HOME/logs/
✅ 第二步
find / -name "hs_err_pid*.log"
✅ 第三步
dmesg | grep -i oom
| 类型 | 含义 |
|---|---|
| Java heap space | 堆内存不足 |
| Metaspace | 类加载过多 |
| GC overhead limit exceeded | GC 频繁 |
| Unable to create new native thread | 线程数过多 |
| Direct buffer memory | NIO 直接内存 |
如果你愿意,可以把 catalina.out 中的 OOM 报错贴出来,我可以帮你精确判断是哪种内存溢出,以及该怎么调。