在 Ubuntu 上定位 Tomcat 的“慢日志”(请求处理慢、启动慢、响应慢等),可以按下面几个方向系统排查。
Tomcat 常见慢分为:
不同慢,日志位置和分析方式不同。
默认安装路径(apt 安装):
/var/log/tomcat9/ # tomcat9 示例
常见日志文件:
catalina.out # 最重要,标准输出和异常
catalina.YYYY-MM-DD.log
localhost.YYYY-MM-DD.log
localhost_access_log.YYYY-MM-DD.txt # 访问日志(关键)
如果是手动安装:
$TOMCAT_HOME/logs/
编辑:
/etc/tomcat9/server.xml
确保有:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b %D" />
⚠️ 重点:%D 是请求耗时(毫秒)
cd /var/log/tomcat9
grep "localhost_access_log" *.txt | awk '{print $NF, $0}' | sort -n | tail -20
或:
cat localhost_access_log.*.txt | sort -k 10 -n | tail
示例:
GET /api/order HTTP/1.1 200 12345
12345 = 12 秒,明显慢
Tomcat 7+ 支持 慢请求检测:
<Valve className="org.apache.catalina.valves.StuckThreadDetectionValve"
threshold="10" />
threshold="10":超过 10 秒视为“卡住线程”catalina.out示例日志:
SEVERE: Thread ... was previously reported to be stuck but has completed.
jstack <tomcat_pid> > tomcat.log
分析:
grep -A 20 "http-nio" tomcat.log
常见:
RUNNABLE + 长时间 → 业务代码慢BLOCKED → 锁竞争WAITING → 外部依赖(DB、Redis)jstat -gcutil <pid> 1000
如果:
FGC 很多OU 接近 100%说明 GC 导致慢。
现象:
Creation of SecureRandom解决:
vim $JAVA_HOME/jre/lib/security/java.security
改为:
securerandom.source=file:/dev/urandom
或启动参数:
-Djava.security.egd=file:/dev/./urandom
看:
catalina.out
搜索:
Deployment of web application
top
iostat -x 1
ulimit -n
Tomcat 高并发建议 ≥ 65535
如果你愿意,可以告诉我:
catalina.out 日志片段我可以直接帮你分析具体原因。