sysctl.conf文件详解

一、文件作用

由于默认的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下对应:

sysctl.conf文件详解

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

三、设置方法

方法一: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攻击。

原创文章,作者:三酷猫,如若转载,请注明出处:https://www.sankumao.com/5370.html

(0)
上一篇 2023年2月14日 上午1:29
下一篇 2023年2月14日 下午11:47

相关推荐

  • shell专项:awk编程

    AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 一、printf 格式化输出 示例: 如果不想把成绩当成字符串输出,而是按照整型和浮点型输出,则要这样: 二、awk …

    2023年2月16日
  • CentOS 7用yum安装软件时报错 cannot find a valid baseurl for repobase7x86_64解决办法

    解决办法:在网卡文件中,设置ONBOOT=yes!(一般情况下为no) 文件内容 保存退出后重启网卡 亲测有效哦~

    2022年7月27日
  • shell编程快速入门八:函数

    一、函数介绍 函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是…

    2023年2月16日
  • shell编程快速入门四:shell中特殊符号和位置符号

    shell中特殊符号 符号 作用 ‘ ‘ 单引号。在单引号中所有的特殊符号,如“$”和”(反引号)都没有特殊含义。单引号括起来的都是普通字符,会原样输出 &…

    2023年2月8日
  • shell专项:sed 文本选取、替换、删除、新增的命令

    sed主要是用来将数据进行选取、替换、删除、新增的命令。 一、语法 二、常用操作 1.提取行数据 还是使用student.txt来作展示。student.txt文件如下 : 指定输…

    2023年2月16日
  • Linux如何查看命令在哪个包里面?

    问题背景 今天安装了centos7系统后,想查看一下端口状况,使用熟悉的netstat命令后,发现command not found。 一时之间也记不起来是哪个包里面的命令了,就随…

    2023年1月14日
  • shell编程快速入门六:数组

    一、数组介绍 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名和索引 索引的编号从0开始,属于数值索引 索引可支持使用自定义的格式,而…

    2023年2月14日
  • shell编程快速入门二:变量

    一、变量命令规则 包含字母、数字、下划线,建议以字母或下划线开头,等号两边不能有空格,见名字知其意! sankumao_age=18 第一种写法 Sankumao_Age=18 大…

    2023年1月30日
  • linux yum源被禁用,yum源管理

    问题现象 安装包时,无法安装。 原因分析 看提示信息:没有可用源,根据提示的方法来查询 启用源 附:源管理命令 1. 列出所有源(包括可用的和不可用的) yum repolist …

    2023年2月7日
  • shell编程快速入门一:脚本书写规范、脚本执行方式

    一、什么是shell? 命令解释器,解释我们输入的命令或者脚本 shell脚本:就是把能在命令行执行中命令放在一个文件里,包括了判断语句,循环语句,数组函数等等 二、脚本书写规范 …

    2023年1月14日