首页 > 系统相关 >linux系统 net.core.somaxconn参数

linux系统 net.core.somaxconn参数

时间:2022-09-20 09:35:55浏览次数:80  
标签:core sysctl linux queue somaxconn net backlog

1、如何查看该参数值

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

sysctl -a	# 查看所有内核参数及值

2)查看net.core.somaxconn参数

[root@localhost ]# sysctl -a | grep net.core.somaxconn
net.core.somaxconn = 128

or

[root@localhost ]# cat /proc/sys/net/core/somaxconn 
128

该参数值默认是128

2、如何修改该参数值

1)立即生效

sysctl -w net.core.somaxconn=1024
1
[root@localhost ]# sysctl -a | grep net.core.somaxconn
net.core.somaxconn = 128
[root@localhost ]# sysctl -w net.core.somaxconn=1024
net.core.somaxconn = 1024
[root@localhost ]# sysctl -a | grep net.core.somaxconn
net.core.somaxconn = 1024

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

2)永久生效

在/etc/sysctl.conf文件中新增一行 net.core.somaxconn=1024;执行sysctl -p

# vim /etc/sysctl.conf
net.core.somaxconn=1024
# sysctl -p   -p选项使sysctl.conf配置文件生效

3、net.core.somaxconn 介绍

1)概念介绍

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

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

backlog参数主要用于底层方法int listen(int sockfd, int backlog), 在解释backlog参数之前,我们先了解下tcp在内核的请求过程,其实就是tcp的三次握手:

  1. client发送SYNserver,将状态修改为SYN_SEND,如果server收到请求,则将状态修改为SYN_RCVD,并把该请求放到syns queue队列中。
  2. server回复SYN+ACKclient,如果client收到请求,则将状态修改为ESTABLISHED,并发送ACKserver
  3. server收到ACK,将状态修改为ESTABLISHED,并把该请求从syns queue中放到accept queue

在linux系统内核中维护了两个队列:syns queueaccept queue

syns queue
用于保存半连接状态的请求,其大小通过/proc/sys/net/ipv4/tcp_max_syn_backlog指定,一般默认值是512,不过这个设置有效的前提是系统的syncookies功能被禁用。互联网常见的TCP SYN FLOOD恶意DOS攻击方式就是建立大量的半连接状态的请求,然后丢弃,导致syns queue不能保存其它正常的请求。

accept queue
用于保存全连接状态的请求,其大小通过/proc/sys/net/core/somaxconn指定,在使用listen函数时,内核会根据传入的backlog参数与系统参数somaxconn,取二者的较小值。

如果accpet queue队列满了,server将发送一个ECONNREFUSED错误信息Connection refused到client。

2)补充

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

参考

https://www.cnxct.com/something-about-phpfpm-s-backlog/
https://blog.csdn.net/whatday/article/details/107740002
https://www.cnblogs.com/leezhxing/p/5329786.html

转载于:https://www.cnblogs.com/my-show-time/p/15206020.html

标签:core,sysctl,linux,queue,somaxconn,net,backlog
From: https://www.cnblogs.com/MoDian/p/16709925.html

相关文章

  • linux 中 seq命令
     001、生成自然序列(base)root@ubuntu02:/home/test#seq5##默认从1开始递增12345(base)root@ubuntu02:/home/test#seq25##指定起始点......
  • Linux 众里寻他千百度
    编译安装问题vim编辑/命令行快捷操作......
  • EFCore 6级联删除问题解决Database operation expected to affect 1 row(s) but actua
    异常信息:Databaseoperationexpectedtoaffect1row(s)butactuallyaffected0row(s).Datamayhavebeenmodifiedordeletedsinceentitieswereloaded.See......
  • Linux env 命令
    Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与......
  • linux系列---【如何查看内存的问题?】
    1.使用free命令free-mfree-gtop  buffers:因为io费时,不可能一个字节一个字节去写入磁盘,所以一般把一段字节存入一个块中放入buffers来做缓冲,再写入磁盘。cach......
  • ASP.NET Core 读取配置文件JSON 数据、数组
    配置访问接口publicIConfiguration_Config;public类名(IConfigurationConfig){_Config=Config;}配置文件数据示例{"AllowedHosts":"*","......
  • Linux运维笔记[3]-部署数据分析框架
    部署jupyterDocker部署JupyterbookJupyterDockerStacksareasetofready-to-runDockerimagescontainingJupyterapplicationsandinteractivecomputingtoo......
  • .NET Core/.NET5/.NET6 开源项目汇总!
    前言企业管理系统一般包含后台管理UI、组织机构管理、权限管理、日志、数据访问、表单、工作流等常用必备功能。下面收集的几款优秀开源的管理系统,值得大家入门学习。如有......
  • linux系列---【如何查看是否是io的问题?】
    1.输入下面命令iostat-dx1#数字1  %util:cpu操作的时候,io占的百分比,大于5都得考虑是不是有问题。await:io阻塞等待的时间。wkB/s:每秒写的字节数,单位kB。rkB......
  • linux常用命令
    1、文件拷贝mv{OldFileName}{NewFileName}mv{OldDirName}{NewDirName}cp{OldFileName}{NewFileName}#-r递归操作cp-r{OldDirName}{NewDirName} 2、权......