Tomcat的server.xml文件中的<Connector>参数是连接超时的基础配置,需重点优化以下参数:
true(默认值),表示上传过程不受connectionTimeout限制,需配合connectionUploadTimeout(上传过程单独超时时间,默认10小时)使用。若上传超大文件(如几十GB),可将connectionUploadTimeout延长至24小时(86400000毫秒),避免上传过程中连接超时。maxKeepAliveRequests="-1"(允许一个长连接处理无限次请求),减少频繁建立/关闭连接的开销。内存不足会导致Tomcat无法及时处理请求,进而引发连接超时。需调整catalina.sh(Linux)或catalina.bat(Windows)中的JVM参数:
-Xms2048m)。应用程序的性能瓶颈是连接超时的常见原因,需通过以下方式优化:
Executors.newFixedThreadPool(10)创建固定大小的线程池(10个线程),提交任务时调用executor.submit()执行。@WebServlet(asyncSupported = true)标注Servlet,调用request.startAsync()获取AsyncContext,将任务提交到线程池执行,完成后调用asyncContext.complete()返回响应,避免阻塞Tomcat线程。若Tomcat前端部署了反向代理(如Nginx),需调整代理配置以避免代理层超时:
http块中定义Tomcat集群(upstream tomcat_servers),在server块的location中设置代理参数:proxy_connect_timeout 60s(连接Tomcat的超时时间)、proxy_send_timeout 60s(向Tomcat发送请求的超时时间)、proxy_read_timeout 60s(从Tomcat读取响应的超时时间)。需确保这些时间大于Tomcat的connectionTimeout,避免代理层提前关闭连接。ProxyPass指令配置Tomcat集群,设置timeout参数(如timeout=60),确保代理层与Tomcat之间的连接超时时间足够。通过监控和日志定位连接超时的根本原因:
catalina.out或localhost_access_log文件,搜索“Connection timed out”“SocketTimeoutException”等关键词,定位超时发生的时间、请求路径及客户端IP。top(Linux)或Task Manager(Windows)监控服务器CPU、内存、磁盘I/O使用率,若资源占用过高(如CPU使用率超过80%),需优化应用程序或升级服务器配置。数据库性能问题(如慢查询、连接池耗尽)会导致请求阻塞,进而引发连接超时:
maxActive:最大连接数,根据数据库负载设置;maxIdle:最大空闲连接数,避免连接泄漏;maxWait:获取连接的最大等待时间,如5000毫秒),避免因连接池耗尽导致请求等待。EXPLAIN分析SQL执行计划),减少数据库响应时间。