温馨提示×

如何定位debian tomcat慢日志

小樊
37
2026-09-10 06:56:12
栏目: 智能运维

在 Debian 上“定位 Tomcat 慢日志”通常分为 三步
1️⃣ 确认 Tomcat 是否开启了访问日志(access log)
2️⃣ 配置或分析慢请求日志(Tomcat 本身不直接叫“慢日志”,需要靠 AccessLog / Valve / 应用日志)
3️⃣ 结合系统与应用层定位“慢”的原因

下面按实战方式来说明。


一、Tomcat 访问日志位置(Debian 默认)

Debian 下 Tomcat 常见路径:

/var/lib/tomcat9/        # Tomcat 主目录(版本可能是 8/9/10)
/var/log/tomcat9/        # 日志目录
/etc/tomcat9/            # 配置文件

访问日志一般在:

/var/log/tomcat9/access.log

如果没有,说明没启用 AccessLogValve。


二、启用 Tomcat 访问日志(关键)

编辑 server.xml:

sudo nano /etc/tomcat9/server.xml

找到 <Host> 节点,确保有:

<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:

sudo systemctl restart tomcat9

三、如何“定位慢请求”

1️⃣ 直接过滤慢请求(示例:>1秒)

awk '$NF > 1000 {print}' /var/log/tomcat9/access.log

或:

grep -E '" [0-9]{3} [0-9]+ [1-9][0-9]{3}' /var/log/tomcat9/access.log

2️⃣ 按接口统计平均耗时

awk '{print $7, $NF}' access.log | sort | uniq -c

其中:

  • $7 是 URL
  • $NF 是耗时(ms)

四、Tomcat 内部“慢”日志(非 access)

catalina.out(应用日志)

/var/log/tomcat9/catalina.out

常见慢原因:

  • GC 停顿
  • 线程池满
  • 数据库连接慢

实时看:

tail -f /var/log/tomcat9/catalina.out

五、Tomcat 线程与慢请求关系

编辑:

/etc/tomcat9/server.xml
<Connector port="8080"
           maxThreads="200"
           acceptCount="100"
           connectionTimeout="20000" />

如果:

  • 请求慢 + 线程数长期满 → 是并发瓶颈

查看线程数:

ps -eLf | grep java | wc -l

六、进阶:慢请求专门日志(推荐)

使用 SlowQueryValve(Tomcat 自带)

<Valve className="org.apache.catalina.valves.SlowQueryValve"
       threshold="1000" />
  • threshold=1000:超过 1 秒记录
  • 日志在 catalina.out

七、系统级辅助定位

1️⃣ CPU / IO

top
iostat -x 1

2️⃣ 网络慢

ss -tanp | grep 8080

3️⃣ JVM GC 慢

jstat -gcutil <pid> 1000

八、总结(定位思路)

✅ 慢日志第一步:开启 access log + %D
✅ 第二步:过滤 >1000ms 请求
✅ 第三步:结合 catalina.out + 线程 + GC
✅ 第四步:定位是 DB / 外部接口 / 代码 / 并发


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

  • Tomcat 版本(8/9/10)
  • 是否是 Spring Boot
  • 慢的是接口还是静态资源

我可以直接帮你写 最优 server.xml 配置

0