温馨提示×

Tomcat线程日志如何查看

小樊
40
2026-07-13 09:42:19
栏目: 智能运维

在 Tomcat 中查看线程相关日志,通常不是 Tomcat 直接记录“线程日志”,而是通过 线程堆栈(thread dump)访问日志应用日志 以及 JVM 日志 来间接分析。下面按常见场景给你一个完整说明。


一、Tomcat 自身日志(catalina.out / logs)

1️⃣ 查看 Tomcat 运行日志

Tomcat 默认日志目录:

$TOMCAT_HOME/logs/

常见文件:

文件 说明
catalina.out 主日志(stdout / stderr)
catalina.2026-01-21.log 按日期拆分的 catalina 日志
localhost.log 应用异常
manager.log manager 应用
host-manager.log host-manager

查看线程异常(如死锁、OOM、线程过多):

tail -f logs/catalina.out
grep -i "thread" logs/catalina.out
grep -i "deadlock\|OutOfMemory\|Exception" logs/catalina.out

二、查看 Tomcat 线程情况(重点)

✅ 方式一:使用 jstack(最常用)

1️⃣ 查找 Tomcat 进程 PID

ps -ef | grep tomcat
# 或
jps -l

2️⃣ 导出线程堆栈

jstack <pid> > thread_dump.txt

3️⃣ 查看线程状态

常见状态:

  • RUNNABLE:正在运行
  • BLOCKED:被阻塞
  • WAITING:等待
  • TIMED_WAITING:超时等待

示例:

"http-nio-8080-exec-5" #45 daemon prio=5 os_prio=0 cpu=123ms
   java.lang.Thread.State: WAITING (parking)

✅ 方式二:Tomcat 线程池日志(访问线程)

Tomcat 使用 线程池 处理请求:

  • http-nio-8080-exec-*
  • ajp-nio-*
  • https-jsse-nio-*

查看线程数量

jstack <pid> | grep "http-nio" | wc -l

查看是否有线程堆积

jstack <pid> | grep -c "BLOCKED"

三、开启 Tomcat 线程调试日志(高级)

1️⃣ 打开 JULI 日志(Tomcat 自带)

编辑:

$TOMCAT_HOME/conf/logging.properties

添加:

org.apache.tomcat.util.threads.level = FINE
org.apache.tomcat.util.net.level = FINE

重启 Tomcat 后,可在 catalina.out 看到线程创建/销毁信息。

⚠️ 不建议生产环境长时间开启


四、通过 JMX 查看线程(推荐生产)

1️⃣ 启用 JMX

export CATALINA_OPTS="-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9999 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false"

2️⃣ 使用工具

  • jconsole
  • jvisualvm
  • Java Mission Control

可实时查看:

  • 线程数
  • 线程状态
  • 死锁检测

五、Tomcat 线程配置与日志关系

server.xml 线程池

<Connector port="8080"
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="200"
    minSpareThreads="10"
    connectionTimeout="20000" />

如果线程不够,会表现为:

  • 请求堆积
  • 响应变慢
  • 看到大量 WAITING 线程

六、快速排查流程(实战)

请求慢 / 卡顿

  1. jstack 看线程状态
  2. 是否大量 BLOCKED / WAITING
  3. 是否数据库连接池耗尽
  4. 是否死锁

线程数暴涨

top -Hp <pid>
jstack <pid> | grep http-nio

七、总结一句话

Tomcat 没有专门的“线程日志”,线程问题主要通过 jstack、JMX 和 catalina.out 中的异常信息来分析。


如果你愿意,可以告诉我:

  • Tomcat 版本
  • Linux / Windows
  • 卡死、慢、OOM、线程暴涨 哪种问题

我可以给你一个针对性的排查命令清单

0