linux内核参数说明

302 阅读5分钟

linux内核参数说明

TCP状态描述

CLOSED:无连接是活动的或正在进行的
LISTEN:服务器在等待进入呼叫
SYN-RECV:一个连接请求已经到达,等待确认
SYN-SENT:应用已经开始,打开一个连接
ESTABLISHED:已经建立的连接
FIN-WAIT1:主动断开一方,第一次发送完FIN
FIN-WAIT2:主动断开一方,收到对端确认的ACK
TIME-WAIT:主动断开一方,收到FIN-ACK
CLOSE-WAIT:被动断开一方,收到对方FIN且发送完ACK后
LAST-ACK:被动断开了方,发送完FIN后

内核参数说明-/etc/sysctl.conf

  • net.ipv4.ip_forward = 1
    #开启ip转发功能
  • net.core.netdev_max_backlog = 400000
    #该参数决定了网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
  • net.core.optmeme_max = 10000000
    #该参数指定了每个套接字所允许的最大缓冲区的大小
  • net.core.rmem_default 说明= 1000000
    #指定了接收套按字缓冲区大小的缺少值
  • net.core.rmem_max = 10000000
    #指定了接收套按字缓冲区大小的最大值
  • net.core.somaxconn = 1000000
    #指定socket监听的backlog(监听队列)上限
  • net.core.wmem_default = 11059200
    #定义默认的发送窗口大小
  • net.ipv4.conf.default.rp_filter = 1 参数定义了网卡对接收到的数据包进行反向路由验证的规则。他有三个值,0、1、2,具体含意如下:
    0:关闭反向路由校验
    1:开启严格的反向路由校验。对每个进来的数据包,校验其反向路由是否是最佳路由。如果反向路由不是最佳路由,则直接丢弃该数据包。
    2:开启松散的反向路由校验。对每个进来的数据包,校验其源地址是否可达,即反向路由是否能通(通过任意网口),如果反向路径不通,则直接丢弃该数据包。
  • net.ipv4.conf.default.accept_source_route = 0
    #关闭路由相关功能
  • kernel.sysrq = 1
    #启用 sysrq 的所有功能

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
#防火墙相关参数

  • kernel.msgmax = 65535
    #消息队列中单个消息的最大字节数
  • kernel.msgmnb = 65535
    #单个消息队列中允许的最大字节长度(限制单个消息队列中所有消息包含的字节数之和)
  • kernel.msgmni = 4096
    #系统中同时运行的消息队列的个数
  • kernel.shmmax = 8589934592
    #单个共享内存段的最大尺寸
  • kernel.shmall = 4000000000 #控制共享内存页数
  • net.ipv4.tcp_windows_scaling = 0
    #关闭tcp_windows_scaling
  • net.ipv4.tcp_ecn = 0 #把TCP的显式拥塞通告关闭
  • net.ipv4.tcp_max_tw_buckets = 10000
    #同时保持TEAM_WAIT套接字的最大数量
  • net.ipv4.tcp_max_syn_backlog = 1024
    #SYN队列长度,默认1024
  • net.ipv4.tcp_syncookies = 1
    #开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理
  • net.ipv4.tcp_tw_reuse = 1
    #开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
  • net.ipv4.tcp_tw_recyle = 1 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭\
  • net.ipv4.tcp_fin_timeout = 10
    #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
  • net.ipv4.tcp_keepalive_time = 1800
    #表示当keepalive开启的时候,TCP发送keepalive消息的频率。缺少是2小时.
  • net.ipv4.tcp_keepalive_probes = 3
    #如果对方不予应答,探测包的发送次数
  • net.ipv4.tcp_keepalive_intvl = 15
    #keepalive探测包发送间隔
  • net.ipv4.ip_local_port_range = 32768 65000
    #用于向外连接的端口范围
  • net.ipv4.tcp_slow_start_after_idle = 0
    #关闭tcp的连接传输的慢启动,即先休止一段时间,再初始化拥塞窗口
  • net.ipv4.route.gc_timeout = 100
    #路由缓存刷新频率,当一个路由失败后,多长时间跳到另一个路由,默认是300
  • net.ipv4.tcp_syn_retries = 1
    #在内核放弃建立连接之前发送SYN包的数量
  • vm.overcommit_memory = 1
    #从内核文档里得知,该参数有三个值,分别是:
    0:当用户空间请求更多的的内存时,内核尝试估算出剩余可用的内存;
    1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算;
    2:当设这个参数值为2时,内核会使用一个决不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。
    设置成2时在内存使用过量时会导致systemd奔溃,此时需要调整该参数,然后用reboot -f 可以重启,-f 表示不通知systemd,直接强制重启

一个完整的内核优化设置:

fs.file-max = 999999

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_rmem = 10240 87380 12582912

net.ipv4.tcp_wmem = 10240 87380 12582912

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.netdev_max_backlog = 262144

net.core.somaxconn = 40960

net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keepalive_time = 30

net.ipv4.ip_local_port_range = 1024 65000

修改完成后执行如下命令生效

sudo sysctl -p

sudo sysctl -w net.ipv4.route.flush=1