【golang】高并发下TCP常见问题解决方案

栏目: IT技术 · 发布时间: 5年前

内容简介:首先,看一下TCP握手简单描绘过程:其握手过程原理,就不必说了,有很多详细文章进行叙述,本文只关注研究重点。在第三次握手过程中,如果服务器收到ACK,就会与客户端建立连接,此时内核会把连接从半连接队列移除,然后创建新的连接,并将其添加到全连接队列,等待进程调用。

问题1:connection reset by peer

首先,看一下TCP握手简单描绘过程:

【golang】高并发下TCP常见问题解决方案

2020-07-25 14-03-46 的屏幕截图.png

其握手过程原理,就不必说了,有很多详细文章进行叙述,本文只关注研究重点。

在第三次握手过程中,如果服务器收到ACK,就会与客户端建立连接,此时内核会把连接从半连接队列移除,然后创建新的连接,并将其添加到全连接队列,等待进程调用。

如果服务器繁忙,来不及调用连接导致全连接队列溢出,服务器就会放弃当前握手连接,发送RST给客户端,即connection reset by peer。

设置服务器的tcp_abort_on_overflow=0,可以在服务器的全连接队列有空位时,接受到客户端的重试ACK,任然会触发服务端连接成功。

问题2:Socket/File : too many open files

linux 平台上,客户端在进行高并发TCP连接处理时,最高并发数量都要受系统对用户单一进程同时打开文件数量的限制(这是因为系统每个TCP都是SOCKET句柄,每个soker句柄都是一个文件),当打开连接超过限制,就会出现too many open files。

使用下指令查看最大句柄数量:

ulimit -a

增加句柄解决方案

vim /etc/security/limits.conf  
#在最后加入  
* soft nofile 4096  
* hard nofile 4096

有疑问加站长微信联系

【golang】高并发下TCP常见问题解决方案

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python灰帽子

Python灰帽子

[美] Justin Seitz / 丁赟卿 译、崔孝晨 审校 / 电子工业出版社 / 2011-3 / 39.00元

《Python灰帽子》是由知名安全机构Immunity Inc的资深黑帽Justin Seitz主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍。老牌黑客,同时也是Immunity Inc的创始人兼首席技术执行官(CTO)Dave Aitel为这本书担任了技术编辑一职。书中绝大部分篇幅着眼于黑客技术领域中的两大经久不衰的话题:逆向工程与漏洞挖掘,并向读者呈现了几乎每个......一起来看看 《Python灰帽子》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具