Debian系统中,Tomcat的日志默认存储在$CATALINA_HOME/logs目录($CATALINA_HOME通常为/usr/share/tomcatX,X为版本号)。核心日志文件包括:
访问日志是识别性能瓶颈的“入口”,重点关注响应时间、请求量、资源路径三大指标:
awk、grep等工具分析日志,例如:
grep "GET" /var/log/tomcatX/localhost_access_log.2025-09-23.txt | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr;awk '{sum+=$10; count++} END {print "Average response time: " sum/count "ms"}' /var/log/tomcatX/localhost_access_log.2025-09-23.txt(假设第10列为响应时间);awk '$10 > 2000 {print $7, $10}' /var/log/tomcatX/localhost_access_log.2025-09-23.txt | sort -k2 -nr | head -20(第7列为URL,第10列为响应时间)。catalina.out和localhost.YYYY-MM-DD.log中的错误信息是性能瓶颈的重要线索:
grep过滤错误日志,例如:
OutOfMemoryError(内存泄漏):grep -i "outofmemoryerror" /var/log/tomcatX/catalina.out;SQLException(数据库问题):grep -i "sqlexception" /var/log/tomcatX/localhost.2025-09-23.log;StackOverflowError(递归或死循环):grep -i "stackoverflowerror" /var/log/tomcatX/catalina.out。频繁的垃圾回收(GC)会导致CPU占用升高、应用响应变慢。需先启用GC日志(修改catalina.sh):
JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tomcatX/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
然后分析GC日志:
grep统计GC频率(如每分钟Full GC次数):grep "Full GC" /var/log/tomcatX/gc.log | awk '{print $1, $2}' | uniq -c;-Xmx/-Xms、优化-XX:NewRatio)。线程转储可显示Tomcat线程的实时状态(如运行、阻塞、等待),帮助识别死锁、线程饥饿或长时间运行的线程:
jstack命令(需知道Tomcat进程ID,通过ps -ef | grep tomcat获取):jstack <tomcat_pid> > /var/log/tomcatX/thread_dump_$(date +%F_%T).log
jstack自带的死锁检测功能(日志中会标注deadlock);Tomcat的性能受系统资源限制,需用工具监控服务器的CPU、内存、磁盘I/O、网络状态:
top或htop查看Tomcat进程的CPU占用(若接近100%,可能是CPU密集型任务或死循环);free -h查看堆内存(-Xmx设置的大小)和非堆内存(-XX:MaxMetaspaceSize)的使用情况(若频繁Full GC且内存未释放,可能是内存泄漏);iostat -x 1查看磁盘读写速度和I/O等待时间(若等待时间过高,可能是磁盘性能瓶颈或频繁的文件IO操作);iftop或nload查看网络流量(若带宽占用过高,可能是大量数据传输或DDoS攻击)。将日志分析与系统监控结果结合,定位具体瓶颈并采取对应措施:
maxActive设置过小)或锁竞争(如synchronized块过大),需调整连接池配置或优化锁粒度;DEBUG改为INFO)或使用缓存。通过以上步骤,可系统性地从Tomcat日志中挖掘性能瓶颈,并结合系统监控和工具分析,制定针对性的优化方案。