温馨提示×

如何查找Tomcat内存溢出日志

小樊
39
2026-08-24 01:45:46
栏目: 智能运维

要查找 Tomcat 内存溢出(OOM,OutOfMemoryError)日志,可以按下面几个方向来排查,基本都能找到原因。


一、最常见位置:Tomcat 日志目录

1️⃣ 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

2️⃣ catalina.yyyy-mm-dd.log

Tomcat 按日期生成的日志文件:

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 崩溃日志(严重时)

当 JVM 直接崩溃时,会生成 hs_err_pid 文件

查找方式:

find / -name "hs_err_pid*.log" 2>/dev/null

常见位置:

  • Tomcat 启动目录
  • 应用当前工作目录
  • /tmp

示例:

hs_err_pid12345.log

里面会明确说明:

  • 是 heap / metaspace / stack 溢出
  • 哪个线程
  • 使用了多少内存

四、Linux 系统日志(进程被杀)

如果是 内存占用过大被操作系统杀掉,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 的 JVM 内存参数(辅助判断)

查看 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

七、常见 OOM 类型对照

类型 含义
Java heap space 堆内存不足
Metaspace 类加载过多
GC overhead limit exceeded GC 频繁
Unable to create new native thread 线程数过多
Direct buffer memory NIO 直接内存

如果你愿意,可以把 catalina.out 中的 OOM 报错贴出来,我可以帮你精确判断是哪种内存溢出,以及该怎么调。

0