在 Tomcat 中查看线程相关日志,通常不是 Tomcat 直接记录“线程日志”,而是通过 线程堆栈(thread dump)、访问日志、应用日志 以及 JVM 日志 来间接分析。下面按常见场景给你一个完整说明。
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
ps -ef | grep tomcat
# 或
jps -l
jstack <pid> > thread_dump.txt
常见状态:
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 使用 线程池 处理请求:
http-nio-8080-exec-*ajp-nio-*https-jsse-nio-*jstack <pid> | grep "http-nio" | wc -l
jstack <pid> | grep -c "BLOCKED"
编辑:
$TOMCAT_HOME/conf/logging.properties
添加:
org.apache.tomcat.util.threads.level = FINE
org.apache.tomcat.util.net.level = FINE
重启 Tomcat 后,可在 catalina.out 看到线程创建/销毁信息。
⚠️ 不建议生产环境长时间开启
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"
jconsolejvisualvmJava Mission Control可实时查看:
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200"
minSpareThreads="10"
connectionTimeout="20000" />
如果线程不够,会表现为:
WAITING 线程✅ 请求慢 / 卡顿
jstack 看线程状态BLOCKED / WAITING✅ 线程数暴涨
top -Hp <pid>
jstack <pid> | grep http-nio
Tomcat 没有专门的“线程日志”,线程问题主要通过
jstack、JMX 和 catalina.out 中的异常信息来分析。
如果你愿意,可以告诉我:
我可以给你一个针对性的排查命令清单。