过滤器中捕获报错 Broken pipe

问题场景

在公司项目中做配置迁移的时候,上线后突然出现线上问题,查日志发现报错Broken pipe,翻译成中文就是管道损坏,还是在过滤器中被捕获的异常,看的我一头雾水

问题分析

发现 Broken pipe"错误通常表示在写入数据时连接的另一端已经关闭。这个错误通常出现在网络通信中,特别是在客户端和服务器之间建立的连接

这个错误的常见原因有

  • 客户端或服务器在写入数据之前关闭了连接:当服务器或客户端提前关闭了连接时,另一端尝试写入数据时就会触发"Broken pipe"错误。这可能是由于连接超时、连接中断或意外关闭引起的。
  • 数据写入速度过慢:如果写入数据的速度比对端读取数据的速度慢,那么对端可能会在等待数据的过程中关闭连接,从而导致"Broken pipe"错误。

回到项目

套用上述线索去查这个接口,这个接口本身运行时正常的,没有任何报错,唯一异常的是发现这个接口执行用了三十多秒,一连查五六个个Broken pipe相关的报错的,都是同样的情况

所以问题就分析明白了

因为接口执行时间过长,已经超过三十秒,所以服务器段和客户浏览器端的连接因为超时的原因就断开了,而且我还特意去找前端同事去确认了下,发现确实是和浏览器有关,也就是接口请求超过一定时间,浏览器会主动关闭这个连接,不同的浏览器的连接最大保持时间不同,常见的谷歌浏览器应该是可以保持30秒,所以接口将数据返回给前端的时候,会在服务器tomcat/undertow进行网络通信将返回值响应回前端时层抛出Broken pipe异常,而后被过滤器层捕获并打印报错

问题解决

修改客户端和浏览器段的最大连接时长(理论可行,但我没试过)

  • 服务器端去修改tomcat或undertow的最大连接时长
  • 前端也要配置连接时长和服务器端一致

优化接口
因为我这里接口执行时间确实不正常(公司老项目的屎山代码,里面一个校验逻辑循环调用了几百次sql),所以扩展思考下,可能时因为配置迁移时对mysql数据库的配置做了些改动,导致sql连接数上限降低,更容易出现sql连接数打满,所以我这里通过优化接口,大幅降低接口执行时间和sql执行频率,即解决该问题
过滤器中捕获报错 Broken pipe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch:什么是自然语言处理(NLP)?

自然语言处理定义 自然语言处理 (natural language processing - NLP) 是人工智能 (AI) 的一种形式,专注于计算机和人们使用人类语言进行交互的方式。 NLP 技术帮助计算机使用我们的自然交流模式(语音和书面文本)来分析、理解和响应我们。 自…

一进三出宿舍限电模块的改造升级

一进三出宿舍限电模块改造升级石家庄光大远通电气有限公司智能模块功能特点: 电能控制功能:可实施剩余电量管理,电量用完时将自动断电; 剩余电量可视报警提示功能:剩余电量可视,并当电量剩余5度时&#xff…

R语言中的机器学习

转载自 R中文论坛(http://rbbs.biosino.org/Rbbs/posts/list/192.page) Machine Learning & Statistical Learning (机器学习 & 统计学习) 网址:http://cran.r-project.org/web/views/MachineLearning.html维护人员:To…

C#和MySQL技巧分享:日期的模糊查询

文章目录 前言一、EF Core 模糊查询二、MySql 日期模糊查询分析和优化2.1 测试环境准备2.1.1 创建数据库2.1.2 查看测试数据 2.2 查询日期的运行效率对比2.3 运行效率优化 三、EF Core 模糊查询优化3.1 字符串转日期3.2 使用日期格式查询 四、优化建议总结 前言 在处理数据库查…

新手必读!网上买的手机卡和实体店一样吗?对比一下你就知道了!

当我们在刷短视频时,总会看到很多关于流量卡的广告,其中各种优惠套餐真的让人“难以置信”,看到这里,很多朋友就会有疑问了,网上购买的流量卡是真是假呢?和线下营业厅的一样吗,接下来&#xff0…

go开发之个人微信号机器人开发

简要描述: 下载消息中的文件 请求URL: http://域名地址/getMsgFile 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型…

Re56:读论文 A Brief History of the Changing Roles of Case Prediction in AI and Law

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:A Brief History of the Changing Roles of Case Prediction in AI and Law 论文下载地址:https://journals.latrobe.edu.au/index.php/law-in-context/article/view/88 本…

Linux Spug自动化运维平台本地部署与公网远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件…

版本控制系统Git学习笔记-Git分支操作

文章目录 概述一、Git分支简介1.1 基本概念1.2 创建分支1.3 分支切换1.4 删除分支 二、新建和合并分支2.1 工作流程示意图2.2 新建分支2.3 合并分支2.4 分支示例2.4.1 当前除了主分支,再次创建了两个分支2.4.2 先合并test1分支2.4.3 合并testbranch分支 2.5 解决合并…

算法基础三

电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits "…

4.10 文件的读写(C语言实现)

【题目描述】创建一个后缀名为txt的文件&#xff0c;并向该文件中写入一个字符串&#xff0c;保存起来。再打开该文件&#xff0c;读出文件中的内容。 【代码实现】 // 文件的读写 # include <stdio.h> # include <stdlib.h> # include <time.h> int main()…

PG时间计算

PG数据库&#xff0c;时间计算使用场景总结 日期之差 --**获取秒差** SELECT round(date_part(epoch, TIMESTAMP 2019-05-05 12:11:20 - TIMESTAMP 2019-05-05 10:10:10)); --**获取分钟差** SELECT round(date_part(epoch, TIMESTAMP 2019-05-05 12:11:20 - TIMESTAMP 20…

识别当前是浏览器还是微信浏览器的问题

/mozilla|chrome|safari|firefox/.test(navigator.userAgent) /mozilla|chrome|safari|firefox/.test(navigator.userAgent.toLowerCase() 这两个的值是相反的, console.log(/mozilla|chrome|safari|firefox/.test(navigator.userAgent),/mozilla|chrome|safari|firefox/.test…

【集合篇】Java集合概述

Java 集合概述 集合与容器 容器&#xff08;Container&#xff09;是一个更广泛的术语&#xff0c;用于表示可以容纳、组织和管理其他对象的对象。它是一个更高层次的概念&#xff0c;包括集合&#xff08;Collection&#xff09;在内。集合&#xff08;Collection&#xff0…

C++的std命名空间

总以为自己懂了&#xff0c;可是仔细想想&#xff0c;多问自己几个问题&#xff0c;发现好像又不是很清楚 命名空间&#xff08;Namespace&#xff09;是C中一种用于解决命名冲突问题的机制&#xff0c;它能够将全局作用域划分为若干个不同的区域&#xff0c;每个区域内可以有…

【使用`model.status`来获取gurobi求解过程中的模型状态】

在Gurobi中&#xff0c;你可以使用model.status来获取求解过程中的模型状态。可以使用了model.status来检查模型是否找到最优解。模型状态是一个Gurobi的常量&#xff0c;表示了求解过程中的不同状态。 以下是一些常见的模型状态&#xff1a; GRB.OPTIMAL: 最优解被找到。GRB…

深入理解Servlet(中)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上篇有一张图&#xff…

TypeScript与JavaScript封装事件的防抖与节流

防抖和节流都是可以限制短时间内事件的频繁触发导致前端资源开销过大或者对后端服务器造成压力的问题。 1. 防抖 防抖是当事件被频繁触发时&#xff0c;只有最后一次事件会成功执行&#xff0c;一般的实现方式是&#xff0c;每次触发先检查是否有定时器存在&#xff0c;有的话…

Redis的安装

本文采用原生的方式安装Redis&#xff0c;Redis的版本为5.0.5 安装 下载 下载网站&#xff1a;https://download.redis.io/releases/ wget http://download.redis.io/releases/redis-5.0.5.tar.gz解压 tar -zxvf redis-5.0.5.tar.gz进入redis目录 cd redis-5.0.5执行编译…

c++滑动窗口

C中实现滑动窗口&#xff0c;可以使用双指针法。双指针法适用于有序数组或者字符串的问题&#xff0c;可以将时间复杂度从O(n^2)优化到O(n)。 具体实现步骤如下&#xff1a; 1. 定义left和right两个指针&#xff0c;分别指向滑动窗口的左右边界。 2. 当滑动窗口满足条件时&am…