日志分析是监控Tomcat负载的关键手段,通过提取请求量、响应时间、错误率、线程使用等核心指标,可快速定位性能瓶颈。以下是具体步骤和方法:
Tomcat的日志文件主要分布在/var/log/tomcat/(默认路径,取决于安装方式)或/opt/tomcat/logs/目录下,常见文件及作用:
server.xml)中的AccessLogValve标签确认访问日志路径(如directory和prefix属性)。通过Linux命令行工具(如grep、awk、wc)从日志中提取负载关键指标:
# 统计access_log中每分钟的请求数(按时间戳排序)
awk '{print $4}' /var/log/tomcat/access_log | cut -d: -f1-2 | sort | uniq -c | sort -nr
# 提取access_log中的响应时间(第10列),计算平均值
awk '{sum+=$10; count++} END {print "Average response time:", sum/count, "ms"}' /var/log/tomcat/access_log
# 统计access_log中5xx错误的占比
grep ' 5[0-9][0-9] ' /var/log/tomcat/access_log | wc -l
total_requests=$(wc -l < /var/log/tomcat/access_log)
echo "Error rate: $(echo "scale=2; $errors/$total_requests*100" | bc)%"
catalina.out中的线程堆栈信息,分析线程繁忙程度(需结合top、htop查看CPU使用率)。# 查找线程数最多的时刻(需结合jstack输出)
grep "Thread pool" /var/log/tomcat/catalina.out | sort | uniq -c | sort -nr
tail -f实时查看最新日志,快速响应异常。tail -f /var/log/tomcat/catalina.out # 监控系统日志
tail -f /var/log/tomcat/access_log # 监控访问日志
grep过滤关键字(如ERROR、404、500),缩小分析范围。grep 'ERROR' /var/log/tomcat/catalina.out # 查找系统错误
grep ' 404 ' /var/log/tomcat/access_log # 查找未找到资源的请求
cronolog工具按日期分割catalina.out,避免单个文件过大。# 安装cronolog
sudo apt-get install cronolog
# 修改catalina.sh,替换输出路径
sed -i 's|System.out.println.*catalina.out|org.apache.catalina.startup.Bootstrap "$@" start \| \/usr\/bin\/cronolog \/var\/log\/tomcat\/catalina.\%Y-\%m-\%d.out >> \/dev\/null &|' /opt/tomcat/bin/catalina.sh
Common Log Format),将半结构化数据转换为JSON格式;#!/bin/bash
LOG_FILE="/var/log/tomcat/access_log"
# 统计每小时5xx错误数
awk '{split($4, time, ":"); hour=time[2]; errors[hour]++} END {for (h in errors) print "Hour", h, "5xx errors:", errors[h]}' "$LOG_FILE"
Tomcat负载与系统资源密切相关,需结合Ubuntu系统日志(如/var/log/syslog、/var/log/messages)分析:
top、htop查看Tomcat进程(java)的CPU占用,若持续超过70%,需优化线程池或代码;free -h查看JVM堆内存使用情况,若频繁Full GC(通过jstat -gcutil <pid>查看),需调整-Xmx、-Xms参数;iostat -x 1查看磁盘读写延迟,若延迟过高(如>50ms),需优化日志写入策略(如异步日志)。通过以上步骤,可从请求量、响应时间、错误率、线程使用、系统资源多维度分析Tomcat负载,快速定位性能瓶颈(如慢请求、线程阻塞、资源不足),为优化提供数据支持。