在 Debian 上排查 Tomcat 慢请求(slow request),一般从 Tomcat 访问日志、线程状态、系统资源、连接配置 几个层面入手。下面按“从简单到深入”给你一套常用方法。
Tomcat 默认使用 AccessLogValve,日志一般在:
/var/log/tomcat9/access.log
# 或
/var/log/tomcat/access.log
(版本不同路径可能是 tomcat8 / tomcat9 / tomcat10)
Tomcat 默认 不记录请求耗时,需要改配置。
编辑:
/etc/tomcat9/server.xml
找到 AccessLogValve:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="access"
suffix=".log"
pattern="%h %l %u %t "%r" %s %b %D" />
重点:
%D:请求耗时(毫秒)%T:秒(小数)重启 Tomcat:
systemctl restart tomcat9
然后查慢请求:
grep -E ' [0-9]{4,}$' /var/log/tomcat9/access.log
# 或
awk '{print $NF, $0}' access.log | sort -nr | head
RequestDumperFilter(调试用)不推荐生产长期使用。
# 找到 tomcat 进程
ps -ef | grep tomcat
# 生成线程栈
jstack <pid> > tomcat_threads.txt
重点看:
BLOCKEDWAITINGRUNNABLE 但长时间不退出top
htop
free -h
iostat -x 1
iotop
netstat -antp | grep java
ss -antp
看是否有:
TIME_WAIT 很多ESTABLISHEDserver.xml:
<Connector port="8080"
maxThreads="200"
acceptCount="100"
connectionTimeout="20000" />
proxy_read_timeout 60s;
如果你愿意,可以告诉我:
我可以直接帮你写 具体排查命令或 server.xml 配置。