Tomcat日志中的资源消耗分析指南
Tomcat日志是诊断服务器资源消耗(如CPU、内存、磁盘I/O、线程等)的核心工具,通过系统分析日志内容及配置,可精准定位性能瓶颈并优化服务器性能。
Tomcat的主要日志文件分布在logs目录下,不同文件记录的资源消耗信息各有侧重:
top、htop命令实时查看Tomcat进程的CPU使用率;分析catalina.out中的线程堆栈(如"http-nio-8080-exec-"线程的CPU占用),定位高CPU线程。catalina.sh中添加-Xloggc:/var/log/tomcat/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps),通过GCViewer工具分析GC频率、持续时间及内存回收效率;catalina.out中的OutOfMemoryError(OOM)异常,定位内存泄漏点(如缓存未清理、大对象未释放)。catalina.out的增长速度(过大的日志文件会增加磁盘I/O),通过logrotate工具定期分割日志;access_log中的静态资源请求(如图片、CSS文件),优化大文件存储(如使用CDN)或启用压缩。localhost.YYYY-MM-DD.log中的线程状态(如"waiting for monitor entry"表示线程阻塞);jstack <tomcat_pid>生成thread_dump.log),分析线程堆栈中的BLOCKED、WAITING状态线程,定位死锁或线程饥饿问题。catalina.out或JMX监控连接池状态(如"HikariPool - connections: 10/10 (active/max)"),避免连接泄漏或连接池过小导致的资源等待。grep -i "memory" catalina.out查找内存相关日志;grep "GET" access_log | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr统计每分钟请求数);tail -f catalina.out监控实时错误)。catalina.sh中的JMX参数(-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false),使用JConsole、VisualVM等工具远程监控Tomcat的资源使用情况(如线程池、内存、GC)。WARN或ERROR,减少DEBUG级别的冗余日志(如conf/logging.properties中修改org.apache.catalina.level = WARN);logrotate工具分割catalina.out(如每天生成一个新文件),避免单个文件过大占用磁盘空间;logging.properties中配置java.util.logging.ConsoleHandler.level = FINE,java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter,java.util.logging.SimpleFormatter.format = [%1$tF %1$tT] [%4$-7s] %5$s %n,减少日志记录对主线程的影响。server.xml中的maxThreads(默认200,可根据CPU核心数调整,如maxThreads="500")、minSpareThreads(默认10,设置为50以减少线程创建开销);-Xms512m -Xmx1024m,初始堆与最大堆一致避免频繁扩容)、选择合适的垃圾回收器(如G1GC适用于大内存应用:-XX:+UseG1GC);server.xml中的AJP Connector(<!-- <Connector protocol="AJP/1.3" address="::" port="8009" redirectPort="8443" /> -->),减少不必要的端口监听。webapps目录下的空应用),减少启动时的资源加载;SELECT *),减少数据库访问时间;InputStream、Connection等资源),减少不必要的对象创建(如使用对象池复用对象),提高代码执行效率。