在 Debian 上排查 Tomcat 线程相关日志/状态,一般分几种情况:看日志文件、看线程堆栈、看实时线程状态。下面按常见做法给你梳理。
Tomcat 日志通常在:
/var/log/tomcat9/ # 版本科幻依版本不同
/var/log/tomcat/
常见日志文件:
catalina.out:最重要,标准输出和异常catalina.YYYY-MM-DD.loglocalhost.YYYY-MM-DD.logmanager.loghost-manager.log查看线程报错(如线程池满、超时):
tail -f /var/log/tomcat9/catalina.out
grep -i "thread" /var/log/tomcat9/catalina.out
grep -i "timeout" /var/log/tomcat9/catalina.out
jstack 查线程堆栈(最常用)先找 Tomcat 的 Java 进程:
ps -ef | grep tomcat
# 或
jps
假设 PID 是 1234:
sudo jstack 1234 > tomcat_threads.log
分析线程:
grep -A 20 "http-nio" tomcat_threads.log
grep -c "RUNNABLE" tomcat_threads.log
grep -c "BLOCKED" tomcat_threads.log
常见线程名:
http-nio-8080-exec-*(请求处理线程)ajp-nio-*ContainerBackgroundProcessortop -H -p 1234
查看 Tomcat 总线程数:
ps -eLf | grep 1234 | wc -l
在 server.xml 中配置 AccessLog + 线程信息:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b %D %I" />
%D:请求耗时(毫秒)%I:线程名(可看线程占用)访问:
http://IP:8080/manager/status
可看到:
jconsole
连接 Tomcat PID,看:
# 实时看日志
tail -f /var/log/tomcat9/catalina.out
# 抓线程堆栈
sudo jstack $(pgrep -f tomcat) > t.log
# 看线程数
ps -eLf | grep tomcat | wc -l
如果你愿意,可以告诉我:
我可以直接帮你写 精准排查命令或 server.xml 配置。