温馨提示×

怎么分析tomcat错误日志

小樊
48
2026-08-20 15:25:44
栏目: 智能运维

分析 Tomcat 错误日志是排查 Java Web 应用问题的关键步骤。下面我按实战流程给你一个系统性的分析方法,从“在哪看”到“怎么看”,再到“常见错误怎么定位”。


一、Tomcat 日志在哪?

Tomcat 日志通常在:

$TOMCAT_HOME/logs/

常见日志文件:

文件名 作用
catalina.out 最重要,标准输出 + 错误输出
catalina.yyyy-mm-dd.log 按日期的 catalina 日志
localhost.yyyy-mm-dd.log 应用级异常
localhost_access_log.yyyy-mm-dd.txt 访问日志(类似 Nginx access log)
manager.xxx.log manager 应用日志
host-manager.xxx.log host-manager 日志

一般优先看 catalina.out


二、分析日志的基本思路(非常重要)

1️⃣ 从「时间」定位问题

  • 出问题的时间点是什么?
  • 日志中对应时间前后发生了什么?
grep -n "2026-01-21 14:" catalina.out

2️⃣ 找「ERROR / Exception / Caused by」

常见关键词

ERROR
Exception
Caused by
SEVERE
java.lang.
at org.apache.
at com.xxx.

示例

SEVERE: Servlet.service() for servlet [xxx] threw exception
java.lang.NullPointerException
    at com.xxx.UserService.getUser(UserService.java:45)

第一行异常通常不是根因


3️⃣ 重点看「Caused by」链(根因)

Caused by: java.sql.SQLException: Connection refused
    at com.mysql.cj.jdbc.ConnectionImpl.connect

最后一个 Caused by 才是真正原因


三、常见 Tomcat 错误类型 & 分析方式

1️⃣ 启动失败

现象

  • Tomcat 起不来
  • 页面 404 / 无响应

常见原因

  • 端口被占用
  • JDK 版本不匹配
  • 配置文件错误

日志特征

Address already in use
Unsupported major.minor version

✅ 解决:

netstat -anp | grep 8080
java -version

2️⃣ 内存溢出(OOM)

日志特征

java.lang.OutOfMemoryError: Java heap space

java.lang.OutOfMemoryError: Metaspace

✅ 解决:

  • 调整 catalina.sh / setenv.sh
-Xms512m
-Xmx1024m
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m

3️⃣ 应用 404

日志特征

org.apache.catalina.core.StandardContext.startInternal
SEVERE: Error deploying web application directory

Context [] not found

✅ 检查:

  • web.xml
  • @WebServlet 路径
  • war 包是否解压成功

4️⃣ 请求 500

典型日志

javax.servlet.ServletException
Caused by: java.lang.NullPointerException

✅ 分析:

  • 看异常发生在哪个类、哪一行
  • 是否空对象、未初始化

5️⃣ 线程池 / 连接池问题

Unable to create initial connections of pool
Timeout waiting for connection

✅ 检查:

  • 数据库连接配置
  • 数据库是否可达
  • 连接池大小

四、实用日志分析命令(Linux)

1️⃣ 实时查看日志

tail -f catalina.out

2️⃣ 查找异常

grep -i exception catalina.out

3️⃣ 只看 ERROR

grep -i "SEVERE\|ERROR" catalina.out

4️⃣ 查看某次启动后的日志

sed -n '/2026-01-21 14:00/,/2026-01-21 14:10/p' catalina.out

五、分析日志的“黄金三步法”

90% 问题都能这样解决

  1. 定位时间点
  2. 找第一个异常
  3. 追踪最后一个 Caused by

六、一个真实分析示例

日志片段

SEVERE: Servlet.service() for servlet [spring] in context threw exception
org.springframework.jdbc.CannotGetJdbcConnectionException
Caused by: java.net.ConnectException: Connection refused

分析

  • 应用:Spring JDBC
  • 根因:数据库连不上
  • 下一步:
    • 检查数据库是否启动
    • 检查 url / port / firewall

七、进阶建议

  • 生产环境 不要只依赖 catalina.out
  • 使用:
    • logback / log4j2
    • 日志按级别拆分
  • 开启 GC 日志分析内存问题

如果你愿意,可以直接:

  • 贴一段 catalina.out 日志
  • ✅ 或说明 Tomcat 版本 + JDK 版本 + 报错现象

我可以帮你逐行分析

0