1. 收集关键日志文件
Tomcat的性能日志主要分布在Ubuntu系统的/var/log/tomcatX/目录下(X为Tomcat实例编号),核心日志包括:
access_log):记录HTTP请求的详细信息(如请求时间、响应时间、资源路径、客户端IP);catalina.out或localhost.<date>.log):记录运行时错误、警告及异常堆栈;gc.log):记录垃圾回收(GC)的频率、持续时间及内存回收情况(需提前在catalina.sh中启用-Xloggc参数);2. 分析访问日志:定位请求性能瓶颈
访问日志是评估应用性能的前线数据,可通过以下命令提取关键指标:
awk '{print $4}' /var/log/tomcatX/access_log | cut -d: -f2 | sort | uniq -c | sort -nr(按分钟统计请求数,找出高峰时段);awk '$NF > 5' /var/log/tomcatX/access_log | awk '{print $1, $4, $7}'(提取响应时间超过5秒的请求,分析耗时资源路径);awk '{print $7}' /var/log/tomcatX/access_log | sort | uniq -c | sort -nr(统计最常访问的资源(如JSP、API接口),定位高频瓶颈点)。3. 分析错误日志:识别潜在故障
错误日志中的异常信息能直接指向性能问题的根源,常见排查方向:
grep "OutOfMemoryError" /var/log/tomcatX/catalina.out(若频繁出现,需调整JVM堆内存参数-Xms/-Xmx);grep "deadlock" /var/log/tomcatX/catalina.out(定位死锁线程,优化同步逻辑);grep "Cannot get connection" /var/log/tomcatX/catalina.out(检查数据库连接池配置是否合理)。4. 分析JVM日志:优化内存与GC性能
JVM日志反映了内存使用和垃圾回收的效率,需借助工具可视化分析:
jstat -gcutil <Tomcat_PID> 1000 10(每秒刷新一次GC状态,观察Eden区、Old区使用率及GC时间);GCViewer工具打开gc.log,分析Full GC频率(若频繁Full GC,需增大Old区大小或更换GC算法(如G1));5. 分析线程转储:解决并发问题
线程转储能捕捉线程的实时状态,用于排查死锁、长时间阻塞等问题:
jstack <Tomcat_PID> > /path/to/thread_dump.log(可多次生成对比,定位死锁线程);VisualVM或fastthread.io工具上传日志,查看“RUNNABLE”(运行中)、“BLOCKED”(阻塞)线程比例;若大量线程处于“BLOCKED”状态,需优化同步代码或增加线程池大小。6. 结合监控工具:实现自动化与可视化
为了更高效地分析性能,建议使用监控工具整合日志与系统指标:
7. 综合优化建议
根据日志分析结果,针对性调整配置:
access_log显示高并发但线程池activeCount接近maxThreads,需增加server.xml中<Connector>的maxThreads参数(如从200调整至500);gc.log显示频繁Full GC,需增大-Xmx(最大堆内存,如从4GB调整至8GB)或更换GC算法(如-XX:+UseG1GC);access_log中数据库请求响应时间长,需优化SQL查询或增加数据库连接池大小(如maxActive从50调整至100);server.xml中配置compression="on")或CDN加速,减少服务器负载。