Tomcat的日志文件主要存储在$CATALINA_HOME/logs目录下($CATALINA_HOME通常为Tomcat的安装路径,如/opt/tomcat或/usr/share/tomcat)。核心日志文件包括:
/var/log/tomcatX(X为版本号,如tomcat9)。tail -f命令动态跟踪日志文件的更新,快速捕捉连接超报错。例如:tail -f $CATALINA_HOME/logs/catalina.out
grep命令筛选包含“连接超时”相关关键词的日志行,提高排查效率。常见关键词包括:
Connection timed out、Read timed out、Write timed out;Connector(连接器名称)、connectionTimeout(超时配置);JDBC Connection timeout、Cannot get connection(连接池无法获取连接)。grep -Ei "connection timed out|read timed out|connector|jdbc connection timeout" $CATALINA_HOME/logs/catalina.out
grep "connection timed out" $CATALINA_HOME/logs/catalina.out > connection_timeouts.log
连接超时问题在日志中通常表现为以下几种形式,需重点关注:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:831)
此类错误表明Tomcat在指定时间内未从客户端或下游服务接收到数据,可能与网络延迟、客户端响应慢有关。org.apache.coyote.http11.AbstractHttp11Processor process
WARNING: Error processing request
java.util.concurrent.TimeoutException: Request processing timeout
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
此类错误通常与Tomcat连接器的connectionTimeout配置过短有关(默认20秒)。org.apache.tomcat.jdbc.pool.ConnectionPool createPool
ERROR: Unable to create initial connections of pool.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
此类错误表明Tomcat无法连接到数据库,可能是数据库服务器宕机、网络不通或连接池maxWait(最大等待时间)设置过短。Connection timed out且伴随网络延迟(可通过ping、iftop命令检查),需排查网络连通性或防火墙设置。catalina.out中出现Too many open files或Connector相关警告,需调整Tomcat的maxThreads(最大线程数)、acceptCount(等待队列长度)或connectionTimeout(超时时间)配置(修改server.xml文件)。RejectedExecutionException(线程池耗尽)或长时间运行的SQL查询(可通过SHOW PROCESSLIST检查数据库),需优化应用程序代码(如使用线程池、异步处理)或数据库查询。通过以上步骤,可系统性地从Tomcat日志中定位连接超时问题,并结合具体原因采取相应的解决措施。