Linux系统内核参数优化之TCP监听队列--net.core.somaxconn
Linux系统内核参数优化之TCP监听队列--somaxconn一、简述内核参数 `somaxconn`二、内核参数修改 `sysctl` 命令1.1 sysctl 命令简述1.1.1 查看前10条内核参数1.1.2 修改`dev.cdrom.autoclose` 变量(键)的值为`0`,重启失效1.1.3 修改内核参数,永久生效三、修改 `somaxconn` 内核参数1.1 直接修改内存中的`
Linux系统内核参数优化之TCP监听队列--somaxconn
一、简述内核参数 somaxconn
net.core.somaxconn
是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。backlog是socket的监听队列:即当一个请求(request)尚未被处理或建立时,其会进入backlog。而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。
该内核参数默认值一般是128
(该参数限制系统中每一个端口最大的监听队列的长度),对于负载要求很高(并发要求很大)的服务程序的要求是远远不能满足的。因此,为了满足我们实际生产环境的需求,我们需要根据需求,修改该参数的默认值到2048或更多,但不是无限大,需要考虑本地的资源以及处理能力,避免服务响应时间过长影响用户体验。
二、内核参数修改 sysctl
命令
1.1 sysctl 命令简述
[root@docker ~]# sysctl -h
Usage:
sysctl [options] [variable[=value] ...]
Options:
-a, --all display all variables # 显示所有内核参数
-n: Use this option to print only values of the given variable or variables. #查看指定内核参数的值
-p: Load sysctl settings from the file specified or /etc/sysctl.conf if none is given. #重新加载内核参数文件,默认加载 /etc/sysctl.conf
-w: Enables writing of a value to a variable. #给内核参数变量写入一个值
1.1.1 查看前10条内核参数
[root@docker ~]# sysctl -a |head -n 10|nl
1 abi.vsyscall32 = 1
2 crypto.fips_enabled = 0
3 debug.exception-trace = 1
4 debug.kprobes-optimization = 1
5 debug.panic_on_rcu_stall = 0
6 dev.cdrom.autoclose = 1
7 dev.cdrom.autoeject = 0
8 dev.cdrom.check_media = 0
9 dev.cdrom.debug = 0
10 dev.cdrom.info = CD-ROM information, Id: cdrom.c 3.20 2003/12/17
注: dev.cdrom.autoclose = 1
,dev.cdrom.autoclose
称为变量(键)
,后面的1
,即为值
;Key/Value方式,或变量方式;
1.1.2 修改dev.cdrom.autoclose
变量(键)的值为0
,重启失效
[root@docker ~]# sysctl -w "dev.cdrom.autoclose=0"
dev.cdrom.autoclose = 0
[root@docker ~]# sysctl -n dev.cdrom.autoclose #查看修改后的值
0
[root@docker ~]# sysctl -a | grep dev.cdrom.autoclose
dev.cdrom.autoclose = 0
修改内核信号量参数,重启后失效
:
[root@docker ~]# sysctl -w "kernel.sem= 250 64000 32 256"
kernel.sem = 250 64000 32 256
或者(直接修改内存中的信号量参数)重启后失效
[root@docker ~]# echo "250 64000 32 256" >/proc/sys/kernel/sem
[root@docker ~]# ipcs -sl
------ Semaphore Limits --------
max number of arrays = 256 # array数
max semaphores per array = 250 #每个array 中的信号个数
max semaphores system wide = 64000
max ops per semop call = 32
semaphore max value = 32767
1.1.3 修改内核参数,永久生效
-
写入定义的内核参数
[root@docker ~]# echo dev.cdrom.autoclose=1 >> /etc/sysctl.conf
-
根据默认内核参数配置文件重新加载
[root@docker ~]# sysctl -p dev.cdrom.autoclose = 1 # 根据指定配置文件,重新加载内核参数设置 [root@docker ~]# sysctl -p /etc/sysctl.conf dev.cdrom.autoclose = 1
三、修改 somaxconn
内核参数
1.1 直接修改内存中的somaxconn
内核参数,重启后失效
系统重启后,该内核参数值丢失
[root@docker ~]# echo 2048 > /proc/sys/net/core/somaxconn
1.2 通过修改内核参数文件修改内核参数,永久生效(推荐)
- 在/etc/sysctl.conf中添加如下
[root@docker ~]# echo net.core.somaxconn = 2048
- 通过内核参数配置文件,重新加载,内核参数变量值:
[root@docker ~]# sysctl -p
1.3 内核参数自定义建议
1. 如果对该内核参数不了解,在生产环境下,勿轻易改动
2. 如果修改内核参数,建议适当修改值的大小,避免给系统的稳定性带来隐患
更多推荐
所有评论(0)