Tomcat的主要日志文件位于$CATALINA_BASE/logs目录(通常为/var/log/tomcatX/,X为实例编号),核心日志包括:
使用tail -f命令实时监控日志文件的新增内容,重点关注线程相关的关键字(如“线程”“线程池”“请求处理”):
tail -f /var/log/tomcatX/catalina.out | grep -i "线程\|线程池\|处理请求"
或监控特定应用的日志(如localhost.log):
tail -f /var/log/tomcatX/localhost.YYYY-MM-DD.log | grep -i "线程"
通过实时输出,可快速发现线程数量的异常增长(如并发请求激增时的线程创建)或长时间阻塞的线程。
在日志中搜索以下关键字,定位线程的具体状态:
java.lang.Thread.State: BLOCKED);namePrefix为线程名前缀,可通过server.xml配置)。若日志中发现线程阻塞或死锁线索,需通过**线程转储(Thread Dump)**获取更详细的线程状态信息:
ps -ef | grep java | grep tomcat | awk '{print $2}'
jstack命令将线程堆栈信息输出到文件:jstack <PID> > /path/to/thread_dump.log
thread_dump.log,搜索线程名(如catalina-exec-XX),查看线程状态(如RUNNABLE、BLOCKED、WAITING)。例如,“BLOCKED”状态的线程会显示其等待的锁对象,帮助定位死锁或资源竞争问题。通过修改Tomcat的logging.properties文件(位于$CATALINA_BASE/conf/),调整线程相关日志的级别,记录更详细的线程活动:
org.apache.catalina或org.apache.coyote组件的日志级别,将其设置为INFO或DEBUG:org.apache.catalina.level = INFO
org.apache.coyote.level = DEBUG
systemctl restart tomcat
调整后,日志会记录更多线程池的操作细节(如线程创建、销毁、任务入队)。对于复杂的线程问题,可使用以下工具提升分析效率:
catalina.out和localhost.log),支持颜色区分不同日志类型;通过以上方法,可全面监控Ubuntu下Tomcat的线程状态,及时发现并发问题(如线程阻塞、死锁)或性能瓶颈(如线程池耗尽),为问题排查和性能优化提供依据。