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

Tomcat出现org.apache.coyote.CloseNowException写入失败问题求助

Tomcat写入失败异常(CloseNowException: Failed write)排查与解决

报错堆栈

org.apache.coyote.CloseNowException: Failed write
at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:548)~[tomcat-embed-core-9.0.39.jar!/:9.0.39]
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:110)~[tomcat-embed-core-9.0.39.jar!/:9.0.39]
at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:193)~[tomcat-embed-core-9.0.39.jar!/:9.0.39]
at org.apache.coyote.Response.doWrite(Response.java:601)~[tomcat-embed-core-9.0.39.jar!/:9.0.39]
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:339)~[tomcat-embed-core-9.0.39.jar!/:9.0.39]
at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:776)~[tomcat-embed-core-9.0.39.jar!/:9

可能原因

  • 客户端提前断开连接:浏览器或客户端在服务器返回响应前主动关闭请求连接,导致服务器无法继续写入数据
  • 网络链路异常:网络波动、防火墙拦截、代理中断等导致TCP连接中途断开
  • Tomcat配置不合理:输出缓冲区过小、连接超时设置过短,引发写入失败
  • 大响应未优化:一次性输出过大的响应数据,未采用分块传输,导致缓冲区溢出或连接超时

解决与优化方案

  • 捕获异常优雅处理:在业务代码中捕获IOException及子类(包括CloseNowException),仅记录日志即可,无需抛出完整堆栈,避免影响正常服务流程
  • 调整Tomcat连接配置:
    • 增大输出缓冲区:在server.xml的Connector标签中添加socketBuffer="65536"(默认8k,可调整为64k)
    • 延长连接超时:设置connectionTimeout="30000"(30秒,根据业务场景调整)
    • Spring Boot环境可在application.properties中配置:
      server.tomcat.connection-timeout=30000
      server.tomcat.max-swallow-size=-1 # 禁用请求体大小限制,避免截断大请求
      
  • 优化客户端请求逻辑:前端避免在请求未完成时关闭页面、跳转路由,确保请求正常完成;大文件下载场景添加进度监听,减少中途中断概率
  • 大响应流式处理:返回大文件或大量数据时,使用流式输出(比如Spring的StreamingResponseBody),分块传输响应,降低内存占用与连接中断风险
  • 升级Tomcat版本:9.0.39存在部分连接处理的已知bug,升级到9.x系列稳定版本(如9.0.80及以上),官方已修复多个相关连接异常问题

内容的提问来源于stack exchange,提问作者郭东洋

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:03:24