日志是诊断Tomcat资源瓶颈、优化资源分配的核心工具。通过分析访问日志、错误日志、JVM日志、线程日志等,可精准定位CPU、内存、线程、连接数等资源的使用问题,进而调整Tomcat配置(如线程池、JVM参数)或系统资源(如文件描述符),提升服务器性能。
Tomcat的日志文件集中存储在/var/log/tomcatX/(X为实例编号)或/opt/tomcat/logs/目录下,不同日志对应不同的资源监控目标:
访问日志(默认路径:/var/log/tomcatX/access_log)的关键指标包括响应时间(avg_time、max_time)、请求量(QPS)、资源路径(如/api/user)。
awk、grep统计高频请求或慢请求,例如:# 统计各资源的请求量(降序)
awk '{print $7}' /var/log/tomcatX/access_log | sort | uniq -c | sort -nr
# 统计响应时间超过2秒的请求
awk '$10 > 2000 {print $7, $10}' /var/log/tomcatX/access_log
错误日志(catalina.out)中的高频错误(如java.lang.OutOfMemoryError: Java heap space、Connection refused)直接反映资源瓶颈。
grep过滤错误类型:grep "OutOfMemoryError" /var/log/tomcatX/catalina.out
grep "Connection refused" /var/log/tomcatX/catalina.out
OutOfMemoryError可能源于内存泄漏,需检查集合类未释放的对象)。OutOfMemoryError:调整JVM堆内存参数(-Xms、-Xmx),例如将初始堆内存从512MB增加到1GB,最大堆内存从1GB增加到2GB;maxActive参数(如从100增加到200),或优化SQL查询(如添加索引)。JVM日志(需在catalina.sh中启用:-Xloggc:/var/log/tomcatX/gc.log -XX:+PrintGCDetails)的关键指标包括GC频率(如每分钟Full GC次数)、GC持续时间(如Full GC耗时超过1秒)。
GCViewer可视化分析GC日志,查看Young GC/Full GC的频率和耗时。-Xmn,如从256MB增加到512MB),减少对象晋升到老年代的频率;-XX:+UseG1GC),提升GC效率。线程池配置(server.xml中的<Connector>标签)直接影响Tomcat的并发处理能力。关键参数包括maxThreads(最大线程数,默认200)、minSpareThreads(最小空闲线程数,默认25)、acceptCount(等待队列长度,默认100)。
catalina.sh中添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcatX/heapdump.hprof,在内存溢出时自动生成线程转储;jstack命令手动获取线程状态:jstack <Tomcat_PID> > /tmp/thread_dump.txt
RUNNABLE(运行中)、WAITING(等待)、BLOCKED(阻塞)的线程数量,例如grep "RUNNABLE" /tmp/thread_dump.txt | wc -l。maxThreads(如从200增加到300),但需避免过多线程导致CPU竞争;Tomcat的性能受操作系统限制,需通过/var/log/syslog或dmesg查看系统级资源使用情况(如文件描述符限制、内存不足)。
ulimit -n(默认通常为1024),若Tomcat连接数多,需增加限制;/etc/security/limits.conf,添加:* soft nofile 40960
* hard nofile 40960
free -h,若内存不足,需增加物理内存或调整Tomcat的-Xmx参数。Prometheus + Grafana监控Tomcat的CPU、内存、线程池、GC等指标,设置报警阈值(如CPU使用率超过80%时报警);JMeter模拟高并发场景,结合日志分析验证优化效果(如调整maxThreads后,观察响应时间和线程池使用率是否改善)。通过以上步骤,可系统性地利用日志定位Tomcat资源瓶颈,针对性调整配置,提升服务器的资源利用率和稳定性。需注意的是,优化后的配置需通过压力测试验证,避免过度配置导致资源浪费。