1. 确定Tomcat日志位置
Debian系统中,Tomcat日志默认存储在/var/log/tomcatX/目录(X为Tomcat主版本号,如tomcat9),核心日志文件包括:
catalina.out:记录标准输出、错误输出及未分类日志(如启动/关闭信息、未捕获异常);localhost.YYYY-MM-DD.log:记录本地主机相关的应用事件(如Servlet生命周期、JSP编译);localhost_access_log.YYYY-MM-DD.txt:访问日志(需确保server.xml中AccessLogValve已启用),记录HTTP请求的详细信息(如请求时间、方法、路径、响应状态、响应时间)。2. 配置日志级别以捕获性能相关信息
通过调整conf/logging.properties文件,设置合适的日志级别,避免过多无关日志干扰性能分析:
INFO(平衡详细度与性能),关键组件(如org.apache.catalina、org.apache.jasper)设为FINE(记录更详细的性能线索);org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE
org.apache.catalina.level = INFO
sudo systemctl restart tomcat。3. 分析访问日志提取性能指标
访问日志(localhost_access_log.*.txt)是监控性能的核心来源,可通过grep、awk等命令提取关键指标:
grep "GET" /var/log/tomcat9/localhost_access_log.2025-09-27.txt | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr
%D字段,记录请求处理时间毫秒数):awk '{sum+=$12; count++} END {print "Average response time: " sum/count "ms"}' /var/log/tomcat9/localhost_access_log.2025-09-27.txt
awk '$12 > 500 {print $0}' /var/log/tomcat9/localhost_access_log.2025-09-27.txt
其中$12为响应时间字段(需根据AccessLogValve配置调整,如pattern="%h %l %u %t "%r" %s %b %D")。4. 监控错误日志定位性能瓶颈
catalina.out或localhost.*.log中的错误信息能直接反映性能问题根源:
tail -f /var/log/tomcat9/catalina.out | grep -i "error\|exception\|timeout\|oom"
OutOfMemoryError:内存泄漏或堆内存不足;ThreadDeadlock:线程死锁;ConnectionPoolExhausted:数据库连接池耗尽;SQLException:慢SQL查询。5. 启用并分析GC日志监控内存性能
垃圾回收(GC)日志能揭示内存使用情况及GC频率,帮助优化JVM堆配置:
bin/catalina.sh,在JAVA_OPTS中添加:JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tomcat9/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps"
gceasy.io(在线工具)或GCViewer(本地工具)解析日志,关注:
6. 使用日志分析工具实现可视化监控
通过ELK Stack(Elasticsearch+Logstash+Kibana)或Splunk等工具,实现日志的集中存储、分析与可视化:
input {
file {
path => "/var/log/tomcat9/*.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} \[%{DATA:thread}\] %{JAVACLASS:class} - %{GREEDYDATA:logmessage}" }
}
date {
match => ["timestamp", "ISO8601"]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "tomcat-logs-%{+YYYY.MM.dd}"
}
}
7. 结合JMX监控实时性能指标
JMX(Java Management Extensions)可实时监控Tomcat的JVM、线程池、内存等性能指标:
bin/catalina.sh,添加:JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
$JAVA_HOME/bin/jvisualvm);localhost:9010);8. 定期归档与清理日志
使用logrotate工具管理日志文件,防止日志过大占用磁盘空间:
/etc/logrotate.d/tomcat配置文件:/var/log/tomcat9/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 tomcat tomcat
sharedscripts
postrotate
systemctl restart tomcat > /dev/null
endscript
}
该配置表示:每日轮转日志,保留7天,压缩旧日志(除最近1天),重启Tomcat以释放文件句柄。