You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 9中浏览器接收HTTP/1.1 payload后未关闭TCP连接的解决方法

问题:Tomcat 9升级后连接关闭延迟问题

背景

我们有一个部署在Tomcat 7上的Spring应用,未出现连接关闭延迟问题;将同一应用部署到升级后的Tomcat 9.0.59(配置相同)时出现异常。

不同场景的连接行为

  • Tomcat 7 + 任意客户端(curl/Chrome等):HTTP/1.1响应体交付给客户端后,客户端会主动关闭连接。
  • Tomcat 9 + curl客户端:行为与Tomcat 7场景一致,客户端主动关闭连接。
  • Tomcat 9 + Google Chrome客户端:客户端不会主动关闭连接,经过Tomcat默认超时时间(20秒)后,服务器被迫关闭连接。

curl场景下的TCP状态捕获片段(最后一列为延迟)

[ /usr/share/bcc/tools]# ./tcpstates | grep "10.0.12.79"
ffff9882b00aaaaa 0     swapper/2  10.14.40.x    8080  10.0.12.y      42312 SYN_RECV    -> ESTABLISHED 0.016
ffff9882b00aaaaa 0     swapper/2  10.14.40.x    8080  10.0.12.y      42312 ESTABLISHED -> CLOSE_WAIT  3.238
ffff9882b00aaaaa 896675 java       10.14.40.x    8080  10.0.12.y      42312 CLOSE_WAIT  -> LAST_ACK    0.687
ffff9882b00aaaaa 0     swapper/2  10.14.40.x    8080  10.0.12.y      42312 LAST_ACK    -> CLOSE       0.157

Chrome场景下的TCP状态捕获片段

[ /usr/share/bcc/tools]# ./tcpstates | grep "10.0.125.97"

ffff9882b00aaaaa 1462  java       10.14.40.x     8080  10.0.125.z     4286  SYN_RECV    -> ESTABLISHED 0.009
ffff9882b00aaaaa 0     swapper/0  10.14.40.x     8080  10.0.125.z      4287  SYN_RECV    -> ESTABLISHED 0.012
ffff9882b00aaaaa 896675 java       10.14.40.x    8080  10.0.125.z      4287  ESTABLISHED -> FIN_WAIT1   1271.089
ffff9882b00aaaaa 0     swapper/0  10.14.40.x     8080  10.0.125.z      4287  FIN_WAIT1   -> FIN_WAIT2   0.341
ffff9882b00aaaaa 0     swapper/0  10.14.40.x     8080  10.0.125.z      4287  FIN_WAIT2   -> CLOSE       0.004
ffff9882b00aaaaa 896675 java       10.14.40.x     8080  10.0.125.z      4286  ESTABLISHED -> FIN_WAIT1   1279.145
ffff9882b00aaaaa 1462  java       10.14.40.x     8080  10.0.125.z      4286  FIN_WAIT1   -> FIN_WAIT2   39.963
ffff9882b00aaaaa 1462  java       10.14.40.x     8080  10.0.125.z      4286  FIN_WAIT2   -> CLOSE       0.006
ffff9882b00aaaaa 0     swapper/0  10.14.40.x     8080  10.0.125.97     4288  SYN_RECV    -> ESTABLISHED 0.009
ffff9882b00aaaaa 896675 java       10.14.40.x     8080  10.0.125.97     4288  ESTABLISHED -> FIN_WAIT1   1281.720
ffff9882b00aaaaa 0     swapper/0  10.14.40.x     8080  10.0.125.97     4288  FIN_WAIT1   -> FIN_WAIT2   40.297
ffff9882b00aaaaa 0     swapper/0  10.14.40.x     8080  10.0.125.97     4288  FIN_WAIT2   -> CLOSE       0.005

关键排查发现

Tomcat 9会在响应头中发送Connection头,而Tomcat 7不会。从TCP状态变化可以看出:

  • curl客户端主动关闭连接时,服务器快速从ESTABLISHED转为CLOSE_WAIT状态;
  • 服务器主动关闭连接时,从ESTABLISHED转为FIN_WAIT1状态需要约21秒(对应Tomcat默认超时时间)。

提问

如何解决该延迟问题,或强制浏览器客户端主动关闭连接?

内容的提问来源于stack exchange,提问作者Colin D'souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:45:54