TCP全链接队列满的问题分析之net.core.somaxconn详解

65 篇文章 1 订阅
42 篇文章 0 订阅

背景

​参考:TCP全链接队列满的问题分析之net.core.somaxconn详解_运维_PHP面试网

最近控制台查看腾讯云服务器状态时,发现一个异常情况提示如下:

该实例最近12小时内在2022-01-18 14:48出现过TCP全链接队列满的情况,为避免成为业务瓶颈,建议您检查业务健康情况。可参考文档:点击查看

TCP 全连接队列满

TCP 全连接队列的长度取 net.core.somaxconn 及业务进程调用 listen 时传入的 backlog 参数,两者中的较小值。若您的实例发生 TCP 全连接队列满导致丢包时,可通过以下步骤进行处理:

  1. 调大内核参数 net.core.somaxconn。内核参数详细信息请参见 Linux 实例常用内核参数介绍

  2. 检查业务进程是否传入了 backlog 参数。若是,则相应调大。

net.core.somaxconn   默认值 128

概念介绍
对于一个TCP链接,Server与Client需要通过三次握手来建立网络链接,当三次握手成功之后,我们就可以看到端口状态由LISTEN转为ESTABLISHED,接着这条链路上就可以开始传送数据了

net.core.somaxconn是Linux中的一个内核(kernel)参数,表示socket监听(listen)的backlog上限。
什么是backlog?backlog就是socket的监听队列,当一个请求(request)尚未被处理或者建立时,它就会进入backlog。
而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。
当Server处理请求较慢时,导致监听队列被填满后,新来的请求就会被拒绝。

对应三次握手结束,还没有 accept 队列时的 establish 状态。accept 队列较多则说明服务端 accept 效率不高,或短时间内突发了大量新建连接。该值过小会导致服务器收到 syn 不回包,是由于 somaxconn 表满而删除新建的 syn 连接引起。若为高并发业务,则可尝试增大该值,但有可能增大延迟。

如何查看该参数值

sysctl -a | grep net.core.somaxconn # 查看net.core.somaxconn参数

如何修改该参数值

sysctl -w net.core.somaxconn=1024   #立即生效,重启后失效

vim /etc/sysctl.conf
net.core.somaxconn=1024
sysctl -p

总结

如果Linux系统中部署了经常处理新请求(request)的高负载的服务,那么显然这个值是需要增加到更合适的值的,上面的修改调整后,再观察服务器的状态,看是否还有类似的问题

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值