解决:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道

2023-05-16

文章目录

    • 项目场景
    • 问题描述
    • 原因分析
    • 解决方案

项目场景

jdk11
Spring Boot 2.x 项目,Tomcat容器
Nginx

问题描述

系统日志中,时不时会出现下面的异常信息:

org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:310)
    at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:273)
    at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:118)
    at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:318)
    at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:153)
    at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:251)
    at org.springframework.util.StreamUtils.copy(StreamUtils.java:148)
    at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:126)
    ...

断开的管道,英文为:Broken pipe

原因分析

首先,需要理解什么是 断开的管道?

简单来说,断开的管道意味着一台机器试图从管道中读取或写入数据,而管道另一端的机器已经死亡或终止。现在,由于连接已经关闭,应该建立新的连接以进一步传输数据,否则数据传输将停止。

它是如何发生的?
可能的原因有:

  1. 由于客户端在发送请求后,还没等服务器响应就断开了连接(可能是因为连接超时、网络原因(突然网断了)、或其他原因),导致服务端无返回通道
  2. 服务端配置导致:tomcat配置 或者 nginx配置的超时时间小了
  3. 服务端nginx配置导致:连续两次过快的 post 请求就会出现 499 的情况,nginx 认为这是不安全的连接,主动断开了客户端的连接。参考如下:

nginx 中的 src/http/ngx_http_special_response.c 文件中对 499 状态码进行了定义:
ngx_string(ngx_http_error_494_page), /* 494, request header too large /
ngx_string(ngx_http_error_495_page), /
495, https certificate error /
ngx_string(ngx_http_error_496_page), /
496, https no certificate /
ngx_string(ngx_http_error_497_page), /
497, http to https /
ngx_string(ngx_http_error_404_page), /
498, canceled /
ngx_null_string, /
499, client has closed connection */

从注释上,我们可以看到 499 表示客户端主动断开连接。

解决方案

可能的优化方案有:

  1. 要求用户不要意外关闭连接(等于没说,哈哈哈
  2. 优化后端,减少api的响应时间
  3. 增加服务器超时时间

tomcat中配置了一个连接超时时间connectionTimeout,如果在这个时间之后,客户端还未得到服务器端的响应的话,就会主动断开连接,这样就会出现上述异常了。tomcat中默认的连接超时时间是20秒,我们一般最好设置为60秒,从而避免后台程序处理时间长导致连接断开。

Nginx有一个名为 proxy_read_timeout 的变量,它的默认值是60s,增加这个值也可以减少出现该问题的几率;

  1. 通过SpringBoot全局异常处理来优雅的处理异常
  2. 上面原因3对应的解决方案:

修改nginx 配置:proxy_ignore_client_abort on;
这个参数的意思是 proxy 忽略客户端的中断,一直等待着代理服务器的返回,如果没有执行错误,则记录的日志是 200 日志,如果执行超时,记录的日志是 504 日志。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道 的相关文章

  • Tomcat 组件是什么?什么是卡塔利娜和郊狼? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 谁能描述一下 Tomcat 中的组件是什么 它在 Tomcat 服务器中的作用是什么 什么是郊狼 卡塔琳娜是什么 Catalina是T
  • 如何让用户会话持续24小时?

    我搞乱了我的 apache 和 php ini 文件 我的网站的用户仍然抱怨网站在很短的时间后或每次关闭并打开同一个浏览器时都会将他们注销 我正在运行 Apache 和 PHP 我应该进行哪些设置才能使用户会话持续 24 小时 这样他们就不
  • URL 扩展隐藏:重写与重定向

    我已经阅读了很多问题和答案 但我无法决定哪一个更好或如何使用这些扩展隐藏方式的组合 我想要的是就是有一个像这样的url重写堆栈溢出 那么我还应该做什么才能遵守这些规则 url example com file anyEXT show con
  • Nginx vs Apache 用于高流量站点

    Would nginx作为高流量网站的网络服务器是否是更合适的选择 我们将建立的网站是一个电子商务网站 如果这有什么不同的话 无论哪种方式 从技术角度来看 我真的对实际的 原因 感兴趣 即 为什么会nginx从技术角度来看 对于此类网站来说
  • Mongrel::DirHandler 相当于 Passenger

    我正在使用 Mongrel DirHandler 来控制静态文件的响应标头 这在我的开发机器上效果很好 我的生产机器使用 Passenger 因此我的标头未设置 使用 Passenger 时如何控制静态文件的标头 我的环境中的片段 rb i
  • mod_fcgid + PHP + apache 锁定

    我正在运行一个相当典型的 LAMP 堆栈 其中 PHP 通过 mod fcgid 运行 考虑到服务器收到的流量 我认为服务器处于 高负载 状态 存在一个间歇性问题 当访问依赖 PHP 的站点时 Apache 报告所有连接都处于 正在发送内容
  • Apache mod_rewrite:在 Windows 计算机上使用 PHP 脚本的 RewriteMap 指令

    这已经让我发疯了 我似乎无法让 RewriteMap 指令适用于 Windows 上的 php 脚本 这是我的 httpd conf 文件中的相关片段
  • 在 Apache 服务器上处理 React Router

    我在重定向 Apache 服务器上 React 生成的 URL 路径的 404 错误时遇到问题 设想 假设我有一些由 React Router 生成的 URL www somewebsite com apps Problem 如果最终用户单
  • 用作 MAMP 起始页 URL 的 index.* 文件在哪里?

    我试图了解 MAMP 如何管理 Apache Web 服务器 但我找不到index 用作 MAMP 起始页的文件 虚拟主机配置 httpd vhosts conf 不包括在内并且Applications MAMP htdocs仅包含我自己的
  • 如何在此 API 中声明全局变量?

    我的应用程序有一个production or development我可以切换的设置 设置服务器时 我在中设置了这个标志Applications gt Mamp gt Conf gt Apache gt httpd conf 它的目的是给我
  • 一个文件夹中的多个 htaccess 文件,还是条件 AuthType Basic?

    我在本地服务器和实时服务器上使用相同的 htaccess 文件 并希望在测试服务器上使用相同的文件 以使代码管理更容易 目前 虽然我必须有一个不同的文件 因为我的测试服务器具有 htaccess 密码访问权限 AuthType Basic
  • 绕过带index.php和不带index.php的url的htpasswd身份验证

    我已经使用 htaccess 文件添加了 htpasswd 保护进行身份验证 现在我想绕过身份验证www website com and www website com index php其中两个 url 都在访问 index php 文件
  • 使用 Nginx 或 Apache 来提供动态内容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Tomcat 8 上的 PHP

    我找到了很多如何让 PHP 在 Tomcat 上运行的指南 但都是以前的版本 我尝试了所有这些 但我所能显示的只是一个空白页面 并且代码仍然没有被触发 我知道 Tomcat 是为 Java 应用程序而不是 PHP 构建的 但我需要找到一种使
  • 将子域重定向到 CakePHP 操作

    背景 我有一个 CakePHP 应用程序 位于 m 我想写一个根级别的 htaccess文件 它将重定向网站的 子域 作为操作的参数 例如 我想编写一个重写规则 这将导致像这样的重定向 http mysite myserver com ht
  • 仅当未找到文件时才重定向请求?

    我希望有一种方法可以使用 mod rewrite 和 Apache 来做到这一点 但也许还有另一种方法可以考虑 在我的网站上 我为客户的网站重新设计版本设置了目录 如果网络根目录是 home blah www 客户端目录将是 home bl
  • Tomcat 托管具有多个 SSL 证书的多个虚拟主机

    例如 我有一台使用 Tomcat 7 托管多个网站的服务器 a abc com b abc com c def com d def com 使用tomcat的虚拟主机功能 因此它们各自可能属于不同的webapps文件夹 我们现在正在尝试为每
  • 为什么有人将(Apache mod_expires 参数)ExpiresByType 设置为“访问加 0 秒”?

    在审查答案时这个帖子 https stackoverflow com questions 9933012 how to use mod headers and mod expires to cache 我不明白为什么这里使用 0 秒作为最佳
  • 未经编辑,无法在 pptx 中的 BarChart 中查看 Apache POI 更新的数据值

    我有一个 pptx 模板 它只有一张用于测试目的的幻灯片 该幻灯片有一个简单的条形图 我可以通过在 pptx 文件上双击条形图来编辑条形图 并且可以更改 Sheet1 条形图数据表 中的值 并且我可以立即在条形图中看到更改 现在 我尝试使用
  • Ubuntu 12.04 上的 PHP 从 5.3 升级到 php 5.6

    我正在按照本教程将 php 从版本 5 3 升级到 5 6 http phpave com upgrade php 53 to php 56 on ubuntu 1204 lts http phpave com upgrade php 53

随机推荐

  • Jetson TK1学习(一) 刷机

    前言 最早接触TK1是在2015年7月份的DJI ROBOMASTER夏令营里 xff0c 当时DJI推出了用于无人机平台的skymind嵌入式计算机 xff0c 也就是后来的 妙算 34 当时我并没有关注这款计算机的架构 只是当时同组的算
  • Jetson TK1学习(二)安装无线网卡

    上一篇文章讲了Jetson TK1的刷机方法 由于TK1自身没有无线网卡 xff0c 单位里面也没有有线的路由器 xff0c 所以需要在TK1上安装个无线网卡 TK1上有PCIE的接口 xff0c 目前对Intel 7260AC这款无线网卡
  • 教你创建Custom Device自定义设备

    1 问题描述 在半物理仿真测试中需要调用仿真机上的硬件设备实现仿真设备间数据通信 模拟和数字信号的采集或驱动等功能 在Veristand实时测试配置环境中可以通过创建Custom Device自定义设备实现PXI机箱 xff08 仿真机 x
  • 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    参考博客 xff1a Unicode与UTF 8互转 C语言实现 xff1a http blog csdn net tge7618291 article details 7599902 汉字 Unicode 编码范围 xff1a http
  • Visual Stdio实现云+端跨平台开发优势,Windows Azure实现移动跨平台

    Visual Stdio实现云 43 端跨平台开发优势 xff08 csdn会议总结 xff09 现代企业的架构平台 xff0c 目前移动开发的平台有哪些 xff1a 如何实现跨平台 xff1a Windows Azure 云端服务在 上海
  • C++类库

    如果你有一定的C基础可能学起来比较容易些 但是学习C 43 43 的过程中又要尽量避免去使用一些C中的思想 平时还要多看一些高手写的代码 遇到问题多多思考 怎样才能把问题抽象化 以使自己头脑中有类的概念 最后别忘了经常上机自己调调程序 这是
  • Mac上安装node和npm

    通过安装包来安装 第 1 步 xff1a 下载适用于 macOS 的 NPM 包 去Node JS官网下载Mac操作系统的npm包 您可以单击此处打开下载页面并为您的系统选择合适的文件 第 2 步 xff1a 按照指南运行包管理器 打开下载
  • Java Maven项目问题整理

    文章目录 src main java文件夹src test java文件夹src main java和src test java文件夹区别读取maven项目中src test resources里的配置文件maven 项目导入本地jar包
  • Lombok使用总结

    文章目录 介绍Lombok原理常用注解 64 Data 64 Getter 64 Setter 64 ToString 64 EqualsAndHashCode 64 NoArgsConstructor 64 AllArgsConstruc
  • 解决:PDFBox报的java.io.IOException: Missing root object specification in trailer

    文章目录 问题描述原因分析解决方案 问题描述 使用pdfbox类库操作pdf文件时 xff0c 遇到下面的报错信息 xff1a java io IOException Missing root object specification in
  • KEIL每次都要编译全部文件并且每个文件编译三次

    SYD8801是一款低功耗高性能蓝牙低功耗SOC xff0c 集成了高性能2 4GHz射频收发机 32位ARM Cortex M0处理器 128kB Flash存储器 以及丰富的数字接口 SYD8801片上集成了Balun无需阻抗匹配网络
  • Mac上Golang语言环境搭建

    文章目录 官网其他参考安装golang源码安装安装包安装使用homebrew安装 配置GOROOTGOPATHGOPROXYGOPRIVATEGONOSUMDB 安装测试 官网 目前无法在家里的直接访问golang org网站 xff1a
  • [已解决] Mac上docker安装prometheus报错:Are you trying to mount a directory onto a file (or vice-versa)?

    文章目录 项目场景问题描述原因分析解决方案 项目场景 Mac上通过docker安装prometheus 问题描述 docker run时 xff0c 会出现下面的报错 xff0c 导致容器启动失败 xff1a docker Error re
  • Mac上安装Node Exporter

    文章目录 安装Node Exporter方法一 xff1a 手动安装方法二 xff1a docker安装 运行测试 node exporter 可以采集机器 xff08 物理机 虚拟机 云主机等 xff09 的监控指标数据 xff0c 能够
  • Docker安装Grafana

    文章目录 Grafana介绍拉取镜像准备相关挂载目录及文件启动容器访问测试添加 Prometheus 数据源常见问题 看板配置 Grafana介绍 上篇博客介绍了prometheus的安装 xff1a Docker部署Prometheus
  • Springboot应用接入Prometheus监控

    文章目录 接入介绍操作步骤修改应用的依赖及配置步骤1 xff1a 修改 pom 依赖步骤2 xff1a 修改配置 本地验证prometheus配置 接入介绍 在使用 Spring Boot 作为开发框架时 xff0c 需要监控应用的状态 x
  • Spring Boot自带监控组件—Actuator介绍

    文章目录 Actuator介绍启用与暴露的区别Spring Boot集成Actuator应用监控框架Actuator监控端点启用端点端点的默认暴露规则案例 自定义端点 Actuator介绍 Actuator是Spring Boot提供的应用
  • Git Commit提交规范总结

    文章目录 前言git commit 提交规范提交消息头 commit message header 提交消息具体内容 commit message body 提交消息尾述 commit message footer Revert 表情 Em
  • 常用kubectl命令总结

    文章目录 配置kubeconfig帮助信息命令查看具体某一个命令的帮助信息列出全局的选项参数 xff08 适用所有的命令 xff09 显示合并的 kubeconfig 配置或一个指定的 kubeconfig 文件 基本命令罗列所支持的完整资
  • 解决:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道

    文章目录 项目场景问题描述原因分析解决方案 项目场景 jdk11 Spring Boot 2 x 项目 xff0c Tomcat容器 Nginx 问题描述 系统日志中 xff0c 时不时会出现下面的异常信息 xff1a org apache