https://www.cnblogs.com/yunjiandubu/p/11006919.html
https://blog.csdn.net/lijun169/article/details/86536696
最近项目虽然已经在正常运行,但是偶尔会有一些不知名的错误冒出来,比如时不时报一个数据库主键重复或者某些时候会有null的异常报出来。看看代码写完能跑起来还只是开始而已,需要不断精进重构,才能让代码运行流畅,今天就发现了另一个没有见过的问题:Broken pipe。
认识broken pipe
pipe是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据。 当该管道从另一端突然关闭时,会发生数据突然中断,即是broken。 对于文件File来说,这可能是文件安装在已断开连接的光盘或远程网络上。 对于socket来说,可能是网络被拔出或另一端的进程崩溃。 在Java中,没有具体的BrokenPipeException。 将此类错误包含在另一个异常,例如java.io.IOException:Broken pipe
解决问题
其实当该异常产生的时候,对于服务端来说,并没有多少影响。因为可能是某个客户端突然中止了进程导致了该错误。但是为了程序能够美观、优雅,还是要在合适的地方捕获该异常,并处理一下。还有一种可能性就是程序里面有代码执行时间过长,用户等待时间过久,才会强行中止进程。那么这种情况下就需要去分析log中报异常的地方是经常发生在什么地方,合理优化该段代码,提升代码的运行速度,才能从根本上避免此类问题的再次发生。
出现“Broken pipe ”可能的情况:
1、客户端请求服务器数据,服务器突然挂了;
2、客户端请求服务端数据,服务端正常返回,但是客户端由于超时等原因断开。
原因分析:做了压力测试,发现遇到的情况属于第二种,由于去数据库取数据的时候,30秒里无法正常获取有效的数据库连接,或者查询时间长,导致OSB过来的请求超时,也就是客户端超时了,服务端还试图返回数据,结果导致如题异常。
解决方法:
1、增大数据库连接池数量;
2、延长客户端超时时间。
————————————————
版权声明:本文为CSDN博主「李君的csdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lijun169/article/details/86536696