,,解决Java中的java.io.IOException- Broken pipe问题

,,解决Java中的java.io.IOException: Broken pipe问题

本文主要介绍java中如何解决java.io.IOException:破管的问题,有很好的参考价值,希望对你有所帮助。如有错误或不足之处,请不吝赐教。

Java 中java.io.IOException: Broken pipe

认识broken pipe

烟斗就是烟斗的意思。管道内部是数据流,通常是从文件或网络套接字读取的数据。

当管道在另一端突然关闭时,数据突然中断,也就是断了。

对于文件File,文件可能安装在断开连接的CD或远程网络上。

对于socket,可能是网络被拉断或者另一端的进程崩溃。

在Java中,没有特定的BrokenPipeException。

将此类错误包含在另一个异常中,如java.io.IOException:Broken pipe。

解决问题

事实上,当异常发生时,对服务器没有太大的影响。此错误可能是由客户端突然中止进程引起的。但是,为了使程序美观大方,还是要在适当的地方捕捉异常并进行处理。

另一种可能是程序中有代码执行时间过长,用户会等待太久才强行停止进程。

在这种情况下,有必要分析日志中的异常报告经常发生在哪里。只有合理优化这段代码,提高代码的运行速度,才能从根本上避免此类问题的再次发生。

可能原因:

1.客户端请求服务器数据,服务器突然挂断;

2.客户端向服务器请求数据,服务器正常返回。由于超时和其他原因,所有客户端都已断开连接。

原因分析:

做了压力测试,发现自己遇到的情况属于第二种。去数据库取数据时,30秒内无法正常获得有效的数据库连接,或者查询时间较长,导致OSB的请求超时,即客户端超时,服务器试图返回数据,导致类似问题的异常。

解决方法:

1.增加数据库连接池的数量;

2.延长客户端超时时间。

java.io.IOException: Broken pipe 线上问题记录

今天上线前验证分期环境就遇到了这样的问题java.io.IOException: Broken pipe。运营服务刚开始后,测试人员第一次进行更配[post]操作,结果是操作失败,但是第二次就好了

我们将springboot angularJs的前端和后端分开,然后使用k8s将服务部署在容器中。最初的异常堆栈信息是这样的,

2019-09-26t 02:42:09 z[http-nio-8080-exec-9]WARN[org . spring framework . web . servlet . MVC . method . annotation . ExceptionHandler exception resolver:411]-未能调用@ExceptionHandler方法:public org . spring framework . http . response entity com . inspur . common . exception . error response com . inspur . common exception . common exception . commoncontrolleradvice . exception handler(javax . servlet .

org . Apache . catalina . connector . clientabortexception:Java . io . io exception:管道破裂

位于org . Apache . catalina . connector . output buffer . do flush(output buffer . Java:321)

位于org . Apache . catalina . connector . output buffer . flush(output buffer . Java:284)

位于org . Apache . catalina . connector . coyote output stream . flush(coyote output stream . Java:118)

位于org . spring framework . security . web . util . onmittedresponsewrappersavecontextservletoutputstream . flush(onmittedresponsewrapper . Java:514)

位于com . faster XML . Jackson . core . JSON . ut F8 jsongenerator . flush(ut F8 jsongenerator . Java:1100)

位于com . faster XML . Jackson . databind . object writer . write value(object writer . Java:915)

位于org . spring framework . http . converter . JSON . abstract Jackson 2 http messageconverter . write internal(abstract Jackson 2 http messageconverter . Java:285)

位于org . spring framework . http . converter . abstractgenerichttpmessageconverter . write(abstractgenerichttpmessageconverter . Java:102)

位于org . spring framework . web . servlet . MVC . method . annotation . abstractmessageconvertermethodprocessor . writewithmessageconverters(abstractmessageconvertermethodprocessor . Java:272)

位于org . spring framework . web . servlet . MVC . method . annotation . httpentitymethodprocessor . handlereturnvalue(httpentitymethodprocessor . Java:224)

位于org。spring框架。网络。方法。支持。handlermethodreturnvaluehandlercomposite。handlereturnvalue(handlermethodreturnvaluehandlercomposite。Java:82)

位于org。spring框架。网络。servlet。MVC。方法。注释。servletinvocablehandler方法。invokeendhandhandle(servletinvocablehandler方法。Java:119)

在org。spring框架。网络。servlet。MVC。方法。注释。exceptionhandlerexceptionresolver。doresolvhandlermethodexception(exceptionhandlererexceptionresolver。Java:400)

位于org。spring框架。网络。servlet。处理程序。abstracthandlermethodexceptionresolver。doresolveexception(abstracthandlermethodexceptionresolver。Java:61)

在org。spring框架。网络。servlet。处理程序。abstracthandlerexceptionresolver。解决异常(abstracthandlerexception解决程序。Java:136)

位于org。spring框架。网络。servlet。处理程序。handlerexceptionresolvercomposite。解决异常(handlerexceptionresolvercomposite。Java:78)

位于org。spring框架。网络。servlet。调度程序servlet。processhandlerexception(dispatcher servlet。Java:1255)

位于org。spring框架。网络。servlet。调度程序servlet。processdispatchresult(调度程序servlet。Java:1062)

位于org。spring框架。网络。servlet。调度程序servlet。do dispatch(dispatcher servlet。Java:1008)

位于org。spring框架。网络。servlet。调度程序servlet。do服务(dispatcher servlet。Java:925)

位于org。spring框架。网络。servlet。框架servlet。processrequest(框架servlet。Java:974)

位于org。spring框架。网络。servlet。框架servlet。doget(框架servlet。Java:866)

位于javax。servlet。http。http servlet。服务(http servlet。Java:687)

位于org。spring框架。网络。servlet。框架servlet。服务(框架servlet。Java:851)

位于javax。servlet。http。http servlet。服务(http servlet。Java:790)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:231)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。阿帕奇。雄猫。web套接字。服务器。ws过滤器。do过滤器(ws过滤器。Java:52)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于com。inspir。常见。过滤器。重复readfilter。do过滤器(repeatedlyreadfilter。Java:34)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

在com。浪潮。EIP。配置。过滤器。keyclockauthfilter。do筛选器(keyclockauthfilter。Java:53)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

在com。阿里巴巴。德鲁伊。支持。http。web统计过滤器。do过滤器(web stat过滤器。Java:123)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

在com。阿里巴巴。德鲁伊。支持。http。web统计过滤器。do过滤器(web stat过滤器。Java:123)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。spring框架。靴子。启动。网络。追踪。servlet。httptracefilter。dofilterinternal(httptracefilter。Java:90)

位于org。spring框架。网络。过滤器。onceperrequestfilter。do filter(onceperrequestfilter。Java:107)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

在com。浪潮。我是。适配器。过滤器。securitycontextfilter。do filter(securitycontextfilter。Java:119)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:320)

位于org。spring框架。安全。网络。访问。拦截。filtersecurityinterceptor。invoke(filtersecurityinterceptor。Java:127)

位于org。spring框架。安全。网络。访问。拦截。filtersecurityinterceptor。do filter(filtersecurityinterceptor。Java:91)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。访问。exceptiontranslationfilter。do filter(exceptiontranslationfilter。Java:119)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。会话。sessionmanagementfilter。do filter(sessionmanagementfilter。Java:137)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。正宗的。anonymousauthenticationfilter。do filter(anonymousauthenticationfilter。Java:111)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。钥匙锁。适配器。春天安全。过滤器。keycloakauthenticatedactionsfilter。do filter(keycloakauthenticatedactionsfilter。Java:74)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。钥匙斗篷。适配器。春天安全。过滤器。keypoaksecuritycontextrequestfilter。do filter(key paketsecuritycontextrequestfilter。Java:77)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。servlet API。securitycontextholderawarerequestfilter。do filter(securitycontextholderawarerequestfilter。Java:170)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。保存的请求。requestcacheawarefilter。do filter(requestcacheawarefilter。Java:63)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。钥匙斗篷。适配器。春天安全。过滤器。keycloakauthenticationprocessingfilter。成功的身份验证(keycloakauthenticationprocessingfilter。Java:208)

位于org。spring框架。安全。网络。正宗的。abstractauthenticationprocessingfilter。do filter(abstractauthenticationprocessingfilter。Java:240)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。正宗的。注销。注销过滤器。do过滤器(注销过滤器。Java:116)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。钥匙斗篷。适配器。春天安全。过滤器。keycloakproeautationsfilter。do filter(keycloakproeautationsfilter。Java:84)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。标题。标头编写器筛选器。dofilter internal(标头编写器筛选器。Java:66)

位于org。spring框架。网络。过滤器。onceperrequestfilter。do filter(onceperrequestfilter。Java:107)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。语境。securitycontextpersistencefilter。do filter(securitycontextpersistencefilter。Java:105)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。语境。请求。异步。webasyncmanagerintegrationfilter。do filter internal(webasyncmanagerintegrationfilter。Java:56)

位于org。spring框架。网络。过滤器。onceperrequestfilter。do filter(onceperrequestfilter。Java:107)

位于org。spring框架。安全。网络。筛选器链代理$virtualfilterchain。做过滤(过滤链代理。Java:334)

位于org。spring框架。安全。网络。筛选器链代理。dofilter internal(筛选器链代理。Java:215)

位于org。spring框架。安全。网络。筛选器链代理。做过滤(过滤链代理。Java:178)

位于org。spring框架。网络。过滤器。委派筛选器代理。已调用elegate(委派筛选器代理。Java:357)

位于org。spring框架。网络。过滤器。委托过滤代理。do筛选(delegatingfilterproxy。Java:270)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。spring框架。网络。过滤器。requestcontextfilter。do filter internal(requestcontextfilter。Java:99)

位于org。spring框架。网络。过滤器。onceperrequestfilter。do filter(onceperrequestfilter。Java:107)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。spring框架。网络。过滤器。httpputformcontentfilter。do filter internal(httpputformcontentfilter。Java:109)

位于org。spring框架。网络。过滤器。onceperrequestfilter。do filter(onceperrequestfilter。Java:107)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。spring框架。网络。过滤器。hiddenhttpmethodfilter。do filter internal(hiddenhttpmethodfilter。Java:93)

位于org。spring框架。网络。过滤器。onceperrequestfilter。do filter(onceperrequestfilter。Java:107)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。spring框架。靴子。启动。度量标准。网络。servlet。webmvcmetricsfilter。filterandrerecordmetrics(webmvcmetricsfilter。Java:155)

位于org。spring框架。靴子。启动。度量标准。网络。servlet。webmvcmetricsfilter。filterandrerecordmetrics(webmvcmetricsfilter。Java:123)

位于org。spring框架。靴子。启动。度量标准。网络。servlet。webmvcmetricsfilter。do filter internal(webmvcmetricsfilter。Java:108)

位于org。spring框架。网络。过滤器。onceperrequestfilter。do filter(onceperrequestfilter。Java:107)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。spring框架。网络。过滤器。字符编码过滤器。dofilter internal(字符编码过滤器。Java:200)

位于org。spring框架。网络。过滤器。onceperrequestfilter。do filter(onceperrequestfilter。Java:107)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。内部do filter(applicationfilterchain。Java:193)

位于org。阿帕奇。卡特琳娜。核心。应用过滤链。do筛选器(applicationfilterchain。Java:166)

位于org。阿帕奇。卡特琳娜。核心。standardwrappervalve。调用(standardwrappervalve。Java:198)

位于org。阿帕奇。卡特琳娜。核心。标准上下文阀。调用(standardcontextvalve。Java:96)

位于org。钥匙斗篷。适配器。雄猫。abstractauthenticatedactionsvalve。invoke(abstractauthenticatedactionsvalve。Java:67)

位于org。阿帕奇。卡特琳娜。认证者。验证者基础。调用(验证者基。Java:493)

位于org。钥匙斗篷。适配器。雄猫。抽象键盘锁认证阀。调用(abstractkeycloakauthenticator阀。Java:181)

位于org。阿帕奇。卡特琳娜。核心。标准主机阀。调用(standardhostvalve。Java:140)

位于org。阿帕奇。卡特琳娜。阀门。错误报告阀。调用(errorreportvalve。Java:81)

位于org。阿帕奇。卡特琳娜。核心。标准工程。调用(standardenenginevalve。Java:87)

位于org。阿帕奇。卡特琳娜。连接器。郊狼适配器。服务(coyote适配器。Java:342)

位于org。阿帕奇。郊狼。http 11。http 11处理器。服务(http 11处理器。Java:800)

位于org。阿帕奇。郊狼。抽象处理器灯。过程(抽象处理器光。Java:66)

位于org。阿帕奇。郊狼。抽象协议$连接处理程序。过程(抽象协议。Java:806)

位于org。阿帕奇。雄猫。util。网。nio端点$套接字处理器。dorun(nio端点。Java:1498)

位于org。阿帕奇。雄猫。util。网。socketprocessorbase。运行(socketprocessorbase。Java:49)

在爪哇。util。并发。threadpoolexecutor。运行工作线程(threadpoolexecutor。Java:1149)

在爪哇。util。并发。threadpoolexecutor$worker。运行(threadpoolexecutor。Java:624)

位于org。阿帕奇。雄猫。util。线程。任务线程$wrappingrunnable。运行(任务线程。Java:61)

位于Java。郎。线程。运行(线程。Java:748)

原因:Java。io。超正析象管异常:管道破裂

位于星期日nio。栗色文件调度程序。写入0(本机方法)

位于星期日nio。栗色套接字调度程序。写(套接字调度程序。Java:47)

位于星期日nio。栗色欠条。writefromnativebuffer(iou til。Java:93)

在星期日nio。栗色欠条。写(iou til。Java:65)

位于星期日nio。栗色套接字通道实现。写(套接字通道实现。Java:471)

位于org。阿帕奇。雄猫。util。网。nio频道。写(nio通道。Java:134)

位于org。阿帕奇。雄猫。util。网。nioblockingselector。写(nioblockingselector。Java:101)

位于org。阿帕奇。雄猫。util。网。nioselectorpool。写(nioselectorpool。Java:157)

位于org。阿帕奇。雄猫。util。网。nio端点$niosocketwrapper。dowrite(nio端点。Java:1306)

位于org。阿帕奇。雄猫。util。网。套接字包装基础。dowrite(套接字包装基础。Java:726)

位于org。阿帕奇。雄猫。util。网。套接字包装基础。冲洗堵塞(插座包装底座。Java:679)

位于org。阿帕奇。雄猫。util。网。套接字包装基础。齐平(插座包装底座。Java:669)

位于org。阿帕奇。郊狼。http 11。http 11输出缓冲区$socketoutputbuffer。刷新(http 11输出缓冲区。Java:646)

位于org。阿帕奇。郊狼。http 11。过滤器。chunkedoutputfilter。flush(chunkedoutputfilter。Java:169)

位于org。阿帕奇。郊狼。http 11。http 11输出缓冲区。刷新(http 11输出缓冲区。Java:252)

位于org。阿帕奇。郊狼。http 11。http 11处理器。flush(http 11处理器。Java:1561)

位于org。阿帕奇。郊狼。抽象处理器。动作(抽象处理器。Java:380)

位于org。阿帕奇。郊狼。回应。行动(响应。Java:173)

位于org。阿帕奇。卡特琳娜。连接器。输出缓冲器。冲洗(输出缓冲区。Java:317)

.127更

解决异常

之后的操作,就正常了,正常日志如下:

谷歌之后大概知道是什么问题了

注:读懂下面这句话,首先要熟悉传输控制协议(传输控制协议)四次挥手,不太熟悉请右转谷歌

总结 Broken Pipe:

这个异常是客户端读取超时关闭了连接,这时候服务器端再向客户端已经断开的连接写数据时就发生了broken pipe异常!

作为一个后端工程师,一定要对日常的一些异常有一个积累总结,笔者就自己有在总结,一是总结整理之后,下次遇到同样的问题自己不会很茫然不知所措,尤其是在上线是,其他同事都在等着你解决问题的时候,你吭吭唧唧那就不太好了,二是笔者之前在面试时也有经常被问到类似的问题,记忆尤新的就是被云校的百度小哥问到对等连接,之前博客也有介绍,作为社招有经验的工程师,更不能再以校招的面试作为自己的标准了,要有自己的经验积累,反正就是,干,就完了

最后,附一张我的错误记事本截图

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: