linux内核参数之net.core.somaxconn

0    38    1

Tags:

👉 本文共约1889个字,系统预计阅读时间或需8分钟。

内核参数net.core.somaxconn 介绍

该参数是Linux 操作系统全局参数,每个 TCP 监听端口的队列长度。

1)概念介绍
对于一个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 连接引起。若为高并发业务,则可尝试增大该值,但有可能增大延迟。

2)补充
Linux系统中,该参数的值默认是128
如果Linux系统中部署了经常处理新请求(request)的高负载的服务,那么显然这个值是需要增加到更合适的值的

1.官方描述

The Linux Kernel
somaxconn - INTEGER
Limit of socket listen() backlog, known in userspace as SOMAXCONN. Defaults to 4096. (Was 128 before linux-5.4) See also tcp_max_syn_backlog for additional tuning for TCP sockets.

取值范围:

  • In RHEL 6 & RHEL 7, the sk_max_ack_backlog field of the sock
    structure is defined as unsigned short which limits the values to 16
    bits whose maximum value is 65535.
  • In RHEL 8, sk_max_ack_backlog
    field of the sock structure is defined as u32 which limits the values
    to 32 bits whose maximum value is 2147483647.

2.不同应用的配置建议

2.1.Oracle WebLogic Server

  • Number of clients: Set somaxconn should be set to at least 1024 to
    allow for a large number of client server connections.
  • Number of queued packets: Set netdev_max_backlog to at least 32768 to minimize packet loss.

2.2.ZooKeeper

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

On linux, below parameter :

net.core.somaxconn

needs to be larger than above “clientPortBacklog” to correctly configure listen socket backlog

2.3.TiDB

检查各项内核参数的值:

net.core.somaxconn: 32768

2.4.Nginx

Increase the value of the net.core.somaxconn kernel parameter from its default value (128) to a value high enough for a large burst of traffic. In this example, it’s increased to 4096.

如何查看该参数值

1)查看所有内核参数及值

2)查看net.core.somaxconn参数

该参数值默认是128

如何修改该参数值

1)立即生效

该方法在重启系统之后会失效,参数值重新恢复成最初的128

2)永久生效
/etc/sysctl.conf文件中新增一行 net.core.somaxconn=1024;执行sysctl -p

配置方法

3.1.临时生效

3.2.永久生效

TCP 全连接队列满

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

  1. 调大内核参数 net.core.somaxconn。内核参数详细信息请参见 Linux 实例常用内核参数介绍
  2. 检查业务进程是否传入了 backlog 参数。若是,则相应调大。

参考

https://blog.csdn.net/qq_31851107/article/details/103497779
https://cloud.tencent.com/document/product/213/57336#upperLimit
https://blog.csdn.net/tiancityycf/article/details/122565051

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部