Ubuntu Tomcat日志中的慢查询分析
一 概念与日志定位
less /var/log/tomcat/localhost_access_log.2025-11-20.txttail -f /var/log/tomcat/catalina.outgrep 'QTime' /var/log/tomcat/localhost_access_log.*.txt二 从 Tomcat 访问日志识别慢接口
grep 'QTime' /var/log/tomcat/localhost_access_log.*.txt | awk -F'QTime=' '$(NF-1) > 800 {print}'sed -n '/2025-11-20 00:00:*/,/2025-11-20 01:00:*/p' /var/log/tomcat/localhost_access_log.*.txt | grep 'QTime' | awk -F'QTime=' '$(NF-1) > 800 {print}'awk/sed 按时间切出目标时段日志,再结合业务特征(如 URL、参数、状态码)定位疑似慢接口,随后联动数据库慢日志进一步确认。三 从数据库慢查询日志定位具体 SQL
SET GLOBAL slow_query_log = 'ON';SET GLOBAL long_query_time = 2; -- 单位秒,可按需调整[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow_query.log
long_query_time = 2
mysqldumpslow -s t -t 10 /var/log/mysql/slow_query.logEXPLAIN):
SELECT *,尽量使用覆盖索引;四 一键排查与优化清单
#!/usr/bin/env bash
LOG_DIR="/var/log/tomcat"
THRESHOLD_MS=800
echo "=== 高耗时接口 TOP 20 ==="
grep 'QTime' "$LOG_DIR"/localhost_access_log.*.txt 2>/dev/null \
| awk -F'QTime=' '$(NF-1) > '"$THRESHOLD_MS"' {print $0}' \
| sort -k $(NF-1)nr \
| head -n 20
echo "=== 建议:对以上接口对应的后端 SQL 开启数据库慢查询日志,并用 mysqldumpslow/pt-query-digest 分析 ==="
maxThreads)、启用 HTTP 压缩、保障 JVM GC/堆 合理。