java broken pipe_ClientAbortException: java.io.IOException: Broken pipe 解决

做压力测试的时候遇到这个问题,自己并发的经验不够。在并发数量低的情况下没有遇到这个问题。经过网上搜索,参考了别人的思路

我们的服务器前端通过nginx做后端Java的负载均衡。当并发上来之后,nginx不断的和后端的Java服务器建立连接。虽然做了keep-alive配置,却依然挡不住连接的销毁和创建。

通过如下命令对连接状态做了统计

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

发下TIME_WAIT数量非常之高,也就是nginx这台服务器主动断开连接,导致Java后端往断开的套接字上写数据,于是报错。按照参考链接里的说法做了如下优化,下面的内容摘自别人文章。

解决方案很简单,通过修改/etc/sysctl.conf文件,服务器能够快速回收和重用那些TIME_WAIT的资源

#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭

net.ipv4.tcp_syncookies = 1

#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭

net.ipv4.tcp_tw_reuse = 1

#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

net.ipv4.tcp_tw_recycle = 1

#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间

net.ipv4.tcp_fin_timeout=30

生效,如下命令

/sbin/sysctl -p

TIME_WAIT降下来了,也没有报Java异常了,顺利解决。

这边文章算是记录了如何把不同人的解决思路综合,拿来解决自己的问题。参考了别人两篇文章。

参考链接

https://blog.csdn.net/zqz_zqz/article/details/52235479

https://www.cnblogs.com/shengs/p/4495998.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值