linux内核调优tcp_max_syn_backlog和somaxconn的区别

The behavior of the backlog argument on TCP sockets changed with Linux 2.2. Now it specifies the queue length for completely established sockets waiting
to be accepted, instead of the number of incomplete connection requests. The maximum length of the queue for incomplete sockets can be set using
/proc/sys/net/ipv4/tcp_max_syn_backlog. When syncookies are enabled there is no logical maximum length and this setting is ignored. See tcp(7) for more
information.
If the backlog argument is greater than the value in /proc/sys/net/core/somaxconn, then it is silently truncated to that value; the default value in this
file is 128. In kernels before 2.4.25, this limit was a hard coded value, SOMAXCONN, with the value 128.

tcp_max_syn_backlog介绍:

socket接收的所有连接都是存放在队列类型的数据结构中,关键问题是这种队列有两个,而且其长度都是可以设置的。
分别是下面两个内核参数:
/proc/sys/net/ipv4/tcp_max_syn_backlog
/proc/sys/net/core/somaxconn
其中:
tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限;

somaxconn参数介绍:

somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成连接上限。
对于没有调优的新装的centOS6.5系统,这两个参数的值都是128。
这么描述虽然精确,但是没有一定基础,不熟练网络编程的人理解起来很费劲。

打个简单的比方:

某某发布公告要邀请四海之内若干客人到场参加酒席。客人参加酒席分为两个步骤:

1、到大厅;
2、找到座位(吃东西,比如糖果、饭菜、酒等)
tcp_max_syn_backlog用于指定酒席现场面积允许容纳多少人进来;
somaxconn用于指定有多少个座位。
显然tcp_max_syn_backlog>=somaxconn。
如果要前来的客人数量超过tcp_max_syn_backlog,那么多出来的人虽然会跟主任见面握手,但是要在门外等候;
如果到大厅的客人数量大于somaxconn,那么多出来的客人就会没有位置坐(必须坐下才能吃东西),只能等待有人吃完有空位了才能吃东西。

那么问题来了:

somaxconn是内核里的参数,listen函数有个参数backlog,如果在listen方法里面指定该参数大于somaxconn的值,重新编译并启动程序,服务端所能接收的完整的连接数上限是backlog呢还是somaxconn?
答案很简单,listen方法指定的backlog是在用户态指定的,内核态的参数优先级高于用户态的参数,所以即使在listen方法里面指定backlog是一个大于somaxconn的值,socket在内核态运行时还会检查一次somaxconn,如果连接数超过somaxconn就会等待。
就相当于主人指定了能有多少座位没用,客人到了现场,准备入座时,还要看酒店的客户经理判断能有多少个座位。

结论:

在没有调优的centOS6.5版本的服务器上,由于受到系统级别的限制,在该服务器上运行的服务端程序,在同一时间,最大只能接受128个客户端发起持久连接,并且只能处理128个客户端的数据通信。

参考文档:
http://www.saunix.cn/1255.html

原文地址:http://blog.51cto.com/wujianwei/2104779

时间: 2024-10-02 09:00:25

linux内核调优tcp_max_syn_backlog和somaxconn的区别的相关文章

大战C100K之-Linux内核调优篇--转载

原文地址:http://joyexpr.com/2013/11/22/c100k-4-kernel-tuning/ 早期的系统,系统资源包括CPU.内存等都是非常有限的,系统为了保持公平,默认要限制进程对资源的使用情况.由于Linux的默认内核配置无法满足C100K的要求,因此需要对其进行适当的调优. 我们可以通过 ulimit 查看一下典型的机器默认的限制情况: $ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -

linux内核调优参考

对于新部署的机器,需要做一些基本的调优操作,以更改一些默认配置带来的性能问题 1 修改打开文件数 [email protected]:/data/tools/db# vim /etc/security/limits.conf * soft nofile 65535 * soft nproc 65535 * hard nofile 65535 * hard nproc 65535 [email protected]:/data/tools/db# cd /etc/security/limits.d

linux内核调优参数对比和解释

具体情况要具体分析,此处只是收集通常会利用到的一些参数的调整,做一些简单的对比和解释. [net] ######################## cat /proc/sys/net/ipv4/tcp_syncookies # 默认值:1 # 作用:是否打开SYN Cookie功能,该功能可以防止部分SYN攻击 net.ipv4.tcp_syncookies = 1 ######################## cat /proc/sys/net/ipv4/ip_local_port_ra

linux内核调优生产环境实例及详解(服务器内核优化)

cat > /etc/sysctl.conf << EOF net.ipv4.ip_forward = 0         net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.bridge.bridge-nf-call-ip

Linux内核调优部分参数说明

#接收套接字缓冲区大小的默认值(以字节为单位). net.core.rmem_default = 262144 #接收套接字缓冲区大小的最大值(以字节为单位). net.core.rmem_max = 16777216 #发送套接字缓冲区大小的默认值(以字节为单位). net.core.wmem_default = 262144 #发送套接字缓冲区大小的最大值(以字节为单位). net.core.wmem_max = 16777216 #用来限制监听(LISTEN)队列最大数据包的数量,超过这个

linux内核调优

内核参数目录cd /proc/sys/net/ipv4/内核参数修改vim /etc/sysctl.confnet.ipv4.tcp_syn_retries = 1net.ipv4.tcp_synack_retries = 1net.ipv4.tcp_keepalive_time = 600net.ipv4.tcp_keepalive_probes = 3net.ipv4.tcp_keepalive_intvl =15net.ipv4.tcp_retries2 = 5net.ipv4.tcp_f

高性能linux服务器内核调优

高性能linux服务器内核调优 首先,介绍一下两个命令1.dmesg 打印系统信息.有很多同学们服务器出现问题,看了程序日志,发现没啥有用信息,还是毫无解决头绪,这时候,你就需要查看系统内核抛出的异常信息了,使用dmesg命令,可以查看系统信息,dmesg -c 清除已经看过的信息.2.sysctl -p 生效内核配置在我们修改内核参数文件/etc/sysctl.conf后,需要执行以下sysctl -p 来使参数生效. nginx服务器内核调优 用户请求,最先进入的是nginx服务器,那我们首

最新最全linux系统调优指南(centos7.X)

linux系统调优指南(centos7.X) 欢迎关注我最新博客地址:https://owelinux.github.io/ 关闭不必要的服务(如打印服务等) for owelinux in `chkconfig --list | grep "3:on" | awk '{print $1}'`; do chkconfig $owelinux off; done for owelinux in crond network sshd rsyslog sysstat iptables; do

Linux性能调优,从优化思路说起

Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache.tomcat.mysql.php等等,开源软件的最大理念是自由.开放,那么linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用最优的性能.因此,谈到性能问题,主要实现的是linux操作系统和应用程序的最佳结合. 一.性能问题综述 系统的性能是指操作系统完成任务的有效性.稳定性和响应速度.Linux系统管理员可能经常会遇到系统不稳定.响