- 首页 >
- 问答 >
-
智能运维 >
- Ubuntu Tomcat日志中的慢查询如何定位
Ubuntu Tomcat日志中的慢查询如何定位
小樊
45
2025-12-21 21:19:04
Ubuntu Tomcat日志中的慢查询定位
一 定位与准备
- 确认日志目录:Tomcat 常用日志路径为 /var/log/tomcat/ 或 /opt/tomcat/logs/;常见文件包括 catalina.out、localhost_access_log.YYYY-MM-DD.txt。进入目录并先列出文件确认名称与日期:
- cd /var/log/tomcat && ls -l
- 确认访问日志已输出处理时间:在 conf/server.xml 的 AccessLogValve 中确保开启并记录处理时间(常见为 %D 或 %T,单位分别为毫秒/秒)。示例:
- <Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs”
prefix=“localhost_access_log” suffix=“.txt” pattern=“%h %l %u %t “%r” %s %b %D” />
- 重启 Tomcat 后,访问日志行将包含处理时间字段(如 %D=毫秒,%T=秒)。以上路径与字段识别方法可直接用于后续筛选。
二 命令行快速筛选
- 基本筛选(按阈值,单位毫秒):从访问日志中找出处理时间超过阈值的请求。示例阈值 800 ms:
- grep ‘QTime=’ /var/log/tomcat/localhost_access_log.*.txt | awk -F’QTime=’ ‘{if($2+0>800) print}’
- 若你的日志使用 %T(秒),将阈值改为 0.8 并调整比较:
- grep ‘processingTime=’ /var/log/tomcat/localhost_access_log.*.txt | awk -F’processingTime=’ ‘{if($2>0.8) print}’
- 按时间窗口提取:先用 sed 截取某天/某时段日志,再用上面的筛选命令。示例提取 2025-03-07 全天:
- sed -n ‘/2025-03-07/,/2025-03-08/p’ /var/log/tomcat/catalina.out > today.log
- 实时观察慢请求:
- tail -f /var/log/tomcat/localhost_access_log.*.txt | awk -F’QTime=’ ‘{if($2+0>800) print "[慢] "$0}’
- 说明:Tomcat 访问日志中常见时间字段名可能为 QTime(部分 Valve 配置)或 processingTime(自定义 pattern);若未显式输出时间字段,请先在 server.xml 的 AccessLogValve pattern 中加入 %D/%T 再分析。
三 进阶分析与可视化
- 集中化与检索:将 Tomcat 访问日志接入 ELK Stack(Elasticsearch + Logstash + Kibana) 或 Graylog,按 URL、status、QTime/processingTime、remoteIP、UA 等维度建立索引与可视化面板,便于按时间段、接口、来源等快速定位持续性慢请求与异常峰值。
- 若慢的根本在数据库:当 Tomcat 通过 JDBC 访问 MySQL 时,开启并收集数据库慢查询日志,使用 pt-query-digest 对慢 SQL 进行聚合、指纹识别与样本定位,结合应用日志中的 requestId/用户/时间 回放与优化。
四 常见陷阱与优化建议
- 单位混淆:%D 输出为毫秒,%T 输出为秒;设置阈值时务必与字段单位一致(例如 800 ms 对应 %D>800,或 %T>0.8)。
- 日志轮转与保留:配置 logrotate 或按日期切分(如使用 cronolog),避免单文件过大导致分析困难与磁盘占满。
- 关联排查:当发现大量慢请求时,结合系统层面进一步排查 CPU、内存、带宽、连接数 等,以区分是 应用处理慢 还是 外部依赖慢(如数据库、下游服务、网络)。