所在位置:首页 → 电脑知识 → Linux → sysctl.conf文件详解

sysctl.conf文件详解

发布: 更新时间:2023-02-14 01:46:49

一、文件作用

由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux参数,使得Nginx等Web服务可以拥有更高的性能:
首先,需要修改/etc/sysctl.conf来更改内核参数。如下最常用的配置

/proc/sys目录下存放着大多数内核参数,并且可以在系统运行时进行更改,不过重新启动机器就会失效。/etc/sysctl.conf是一个允许改变正在运行中的Linux系统的接口,它包含一些TCP/IP堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。也就是说/proc/sys下内核文件与配置文件sysctl.conf中变量存在着对应关系。

二、与/proc/sys下目录对应关系

kernel.sem参数与/proc/sys下对应:

第一列,表示每个信号集中的最大信号量数目。
第二列,表示系统范围内的最大信号量总数目。
第三列,表示每个信号发生时的最大系统操作数目。
第四列,表示系统范围内的最大信号集总数目。

三、设置方法

方法一:echo value > /proc/sys/xx/yy

方法二:vim /etc/sysctl.conf # vi编辑,然后添加设置 ; sysctl -p # 加载内核参数,永久生效

方法三:sysctl -w kernel.domainname="example.com" # 利用-w生效

四、sysctl 命令

sysctl 命令--配置内核参数

1.sysctl命令对内核参数的修改仅在当前生效,重启系统后参数丢失;
永久生效可以修改配置文件“/etc/sysctl.conf”

2.作用:用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中;
它包含一些TCP/ip堆栈和虚拟内存系统的高级选项;
sysctl可以读取设置超过五百个系统变量。

3.选项:
-n:打印值时不打印关键字;
-e:忽略未知关键字错误;
-N:仅打印名称;
-w:当改变sysctl设置时使用此项;
-p:从配置文件“/etc/sysctl.conf”加载内核参数设置;
-a:打印当前所有可用的内核参数变量和值; !!!!
-A:以表格方式打印当前所有可用的内核参数变量和值。

五、常用的配置:

vm.swappiness = 0
vm.max_map_count=655360
fs.file-max = 999999 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_keepalive_time = 60 
net.ipv4.tcp_fin_timeout = 30 
net.ipv4.tcp_max_tw_buckets = 5000 
net.ipv4.ip_local_port_range = 1024 61000 
net.ipv4.tcp_rmem = 4096 32768 262142 
net.ipv4.tcp_wmem = 4096 32768 262142 
net.core.netdev_max_backlog = 8096 
net.core.rmem_default = 262144 
net.core.wmem_default = 262144 
net.core.rmem_max = 2097152 
net.core.wmem_max = 2097152 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_max_syn.backlog = 1024
  1. 上述参数中每个.分割的就是一个目录,例如kernel.msgmnb就等价于/proc/sys/kernel/msgmnb文件
  2. /proc是系统每次重新挂载的,反映系统内存的一些状态

上面的参数意义解释如下:

  • vm.swappiness : 关闭swap分区,kubernetes环境必备
  • vm.max_map_count : ElasticSearch环境必备,否则启动报错。
  • file-max : 这个参数表示进程(比如一个work进程)可以同时打开的最大句柄数,这个参数直接限制最大并发连接数,需根据实际情况配置。
  • tcp_tw_reuse : 这个参数设置为1,表示允许将TIME-WAIT状态的socket重新用于新的TCP连接,这对于服务器来说很有意义,因为服务器上总会有大量TIME-WAIT状态。
  • tcp_keepalive_time : 这个参数表示当keepalive启用时,TCP发送keepalive消息的频率。默认是2小时,若将其设置的小一些,可以更快第清理无效的连接。
  • tcp_fin_timeout : 这个参数表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间。
  • tcp_max_tw_buckets : 这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字,TIME_WAIT套接字将立刻被清除病打印警告信息。该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器变慢。
  • tcp_max_syn_backlog : 这个参数表示TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求。
  • ip_local_port_range : 这个参数定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围。
  • net.ipv4.tcp_rmem : 这个参数定义了TCP接收缓存(用于TCP接收滑动窗口)的最小值、默认值、最大值。
  • net.ipv4.tcp_wmem : 这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值、默认值、最大值。
  • netdev_max_backlog : 当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。
  • rmem_default : 这个参数表示内核套接字接收缓存区默认的大小。
  • wmem_default : 这个参数表示内核套接字发送缓存区默认的大小。
  • rmem_max : 这个参数表示内核套接字接收缓存区的最大大小。
  • wmem_max : 这个参数表示内核套接字发送缓存区的最大大小。
  • tcp_syncookies : 该参数与性能无关,用于解决TCP的SYN攻击。

标签:, , , , ,
文章排行