Netty IOException:你的主机中的软件中止了一个已建立的连接

问题描述:

使用Netty写了一个服务器和客户端,进行压力测试,客户端for循环启动了5w次,每次发送一定量的数据,但是只成功发送不到1w次,服务器疯狂报错:


原因分析:

因为是服务器报的错:,所以在服务器中查找bug(如果是客户端出错,服务器的log应该是:)

可能是netty服务端配置的参数不足以支撑瞬间的高并发请求(比如SO_BACKLOG设置的不够大,或者是服务器的硬件不行,加上服务器处理的是需要一定耗时的业务,反正最后它处理不过来了,就将无法处理的连接都关闭了


解决方案:

每次执行完for循环里的语句进行适当的
服务器的参数设置后期实验中

————————-11.26手动分割线————————-

又做了几天实验,发现我前几天得出的结论好蠢。。

先说结论:确实是服务器这边无法支撑那么多连接,就主动断开了一些连接。

但是主要问题还是出在代码的编写上(就想着netty不可能撑不起来几万的连接嘛,我好菜我先说),因为我做的业务比较耗时(收文件-文件处理-发文件),之前以为只有【文件处理】比较耗时,再加上netty文档里面建议不是很耗时的业务就尽量复用,否则线程的切换开销更大,所以只给【文件处理】的那个handler分配了专门处理的,但其实高并发的情况下【收发文件】也是很耗时的业务,也应该用来处理,否则就会占用服务器专门来处理IO的,就会导致。

然后把写成了全局单例的变量,尽量减少每次创建销毁的开销以及OOM的可能

目前这样修改完,客户端跑了30w,暂时没有发现问题,后续再实验

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91725 人正在系统学习中

来源:修行的小和尚

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年10月19日
下一篇 2020年10月19日

相关推荐