阅读量:2
定位思路与准备
- 明确“慢”的定义:设定阈值(如800 ms或2 s),用于后续筛选。
- 找到日志文件:Tomcat常见日志目录为**/var/log/tomcat/或/opt/tomcat/logs/;访问日志通常为localhost_access_log.YYYY-MM-DD.txt**,运行日志为catalina.out。
- 确认日志格式:若访问日志包含QTime(请求处理耗时,单位毫秒),可直接按QTime筛选;否则需先调整访问日志的pattern以输出耗时字段。
快速命令行定位
- 基本筛选:从访问日志中找出包含QTime的行
- grep ‘QTime’ /var/log/tomcat/localhost_access_log.*.txt
- 阈值筛选:以800 ms为例,提取QTime大于阈值的请求
- 写法A(兼容性好):cat /var/log/tomcat/localhost_access_log.*.txt | grep ‘QTime’ | awk -F’QTime=’ ‘{if($2+0>800) print}’
- 写法B(字段分隔更稳健):cat /var/log/tomcat/localhost_access_log.*.txt | awk -F’QTime=’ ‘$2+0>800 {print}’
- 时间范围提取:将某段时间日志导出到单独文件(示例为10:00–11:00)
- sed -n ‘/2025-03-12 10:00/,/2025-03-12 11:00/p’ /var/log/tomcat/catalina.out > today.log
- 实时监控:观察新增慢请求
- tail -f /var/log/tomcat/localhost_access_log.*.txt | awk -F’QTime=’ ‘$2+0>800 {print "[慢] " $0}’
- 说明:QTime后的数值是毫秒;上述命令中的**$2+0**用于把字符串转为数值进行比较。
进阶分析与可视化
- 集中化分析:将Tomcat日志采集到ELK Stack(Elasticsearch + Logstash + Kibana)或Graylog,用Kibana/Graylog建立QTime分布直方图、Top慢接口、按IP/UA/接口聚合等可视化面板,便于长期观测与告警。
- 数据库侧慢SQL:若瓶颈在数据库,开启数据库慢查询日志(如MySQL设置slow_query_log=ON、long_query_time=2),再用pt-query-digest分析,定位执行计划与索引问题。注意:pt-query-digest分析的是数据库慢日志,并非Tomcat访问日志。
- 关联排查:结合catalina.out错误日志、线程转储(jstack)、JVM监控(JConsole/VisualVM/Prometheus+Grafana)与数据库连接池指标,判断是应用、容器还是数据库导致的慢。
访问日志配置建议
- 在server.xml的AccessLogValve中输出耗时字段(示例含QTime与Usec):
- 字段含义要点:
- %D:请求处理时间,单位毫秒(适合做QTime阈值筛选)。
- %F:响应提交时间,单位毫秒(从请求开始到响应提交)。
- %T:请求处理时间,单位秒(浮点)。
- %{us}T:请求处理时间,单位微秒(便于更细粒度分析)。
- 修改配置后重启Tomcat,新的访问日志将包含耗时字段,便于后续命令与可视化直接筛选。
以上就是关于“Tomcat日志中慢查询怎么定位”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm