Linux 系统常用内核参数配置

  • 系统级打开文件数
    fs.file-max = 20000000
  • 单用户打开文件数
    fs.nr_open = 20000000
  • 限制一个用户能够监视的文件或目录的数量
    fs.inotify.max_user_watches=524288
  • 最大进程数
    kernel.pid_max = 65536
  • 禁用sysrq(键盘上截图键)
    kernel.sysrq = 0
  • 交换分区权重
    vm.swappiness = 10
  • 给生成的core文件加上pid
    kernel.core_uses_pid = 1
  • 设置临时端口使用范围
    net.ipv4.ip_local_port_range = 10000 65535
  • 设置预留端口
    net.ipv4.ip_local_reserved_ports = 15000-16000,18796,25000-26000,28796
  • 共享内存: ipcs --help
  • 一个消息队列的最大长度 Byte
    kernel.msgmnb = 65536
  • 从一个进程发送到另一个进程的消息的最大长度 Byte
    kernel.msgmax = 65536
    kernel.msgmni = 16
  • 定义单个共享内存段的最大值,建议物理内存的50%
    kernel.shmmax = 2147483648
  • 共享内存页大小
    kernel.shmall = 524288
  • 网络: TCP/IP, socket
  • 全连接队列长度, (默认 128)
    net.core.somaxconn = 4096
  • 半连接队列长度, 当使用sysncookies无效 (syn队列, 默认128)
    net.ipv4.tcp_max_syn_backlog = 4096
  • 开启SYN Cookies(出现SYN等待队列溢出时可防范少量SYN攻击, 和上面不能同事开启)
    net.ipv4.tcp_syncookies = 0
  • 最大孤儿socket数量,一个孤儿socket占用64KB,当socket主动close掉,处于fin-wait1, last-ack(快速建立大量连接时,需要关注这个值)
    net.ipv4.tcp_max_orphans = 10240
  • 孤儿socket废弃前重试的次数
    net.ipv4.tcp_orphan_retries = 1
  • 网卡数据包队列长度
    net.core.netdev_max_backlog = 5000
  • time-wait 最大队列长度 (如果超过这个数, TIME_WAIT套接字将立刻被清除并打印警告信息)
    net.ipv4.tcp_max_tw_buckets = 500
  • 开启Selective ACK,用来查找特定丢失数据包,有助于快速恢复状态
  • 开启有选择应答模式(允许接收端向发送端传递关于字节流重丢失的序列号,减少不必要的重传)
    net.ipv4.tcp_sack = 1
  • 开启tcp的滑动窗口
    net.ipv4.tcp_window_scaling = 1
  • 开启TCP连接中TIME-WAIT sockets的快速回收
    -net.ipv4.tcp_tw_recycle = 1
  • 表示开启重用. 允许将TIME-WAIT sockets重新用于新的TCP连接
    net.ipv4.tcp_tw_reuse = 1
  • tcp报文探测时间间隔, 单位s
    net.ipv4.tcp_keepalive_intvl = 30
  • tcp连接多少秒后没有数据报文时启动探测报文
    net.ipv4.tcp_keepalive_time = 60
  • 探测次数(心跳连接失败端口该连接)
    net.ipv4.tcp_keepalive_probes = 3
  • 保持fin-wait-2 状态多少秒
    net.ipv4.tcp_fin_timeout = 15
  • 每个套接字所允许得最大缓存区大小
    net.core.optmem_max = 1048576
  • 给tcp栈分配的内存大小,单位为 mem page, 通常为 4kb(可通过命令查看: getconf PAGESIZE)(这里调整为: 768MB 1GB 1.5G, 适用于 4GB 内存的服务器)
  • 第一个数字表示,当 tcp 使用的 page 少于设置值时,kernel不对其进行任何的干预
  • 第二个数字表示,当 tcp 使用的 pages 超过了设置值时,kernel 会进入 "memory pressure" 压力模式
  • 第三个数字表示,当 tcp 使用的 pages 超过设置值时,就会报: Out of socket memory
    net.ipv4.tcp_mem = 196608 262144 393216
  • 为每个TCP连接分配读,写缓冲区大小,单位为: Byte (这里调整为: 4KB 8KB 4M)
  • 第一个数字表示,为TCP连接分配的最小内存
  • 第一个数字表示,为TCP连接分配的缺省内存
  • 第一个数字表示,为TCP连接分配的最大内存
  • 第二个,第三个分别被wmem_default, wmem_max覆盖
  • 一般按照缺省值分配. 1.6GB TCP内存能容纳的连接数约为: 1600MB/16KB = 100K = 10万, 4.0GB TCP内存能容纳的连接数约为: 4000MB/16KB = 250K = 25万
  • 读缓冲区
    net.ipv4.tcp_rmem = 4096 8192 4194304
  • 写缓冲区
    net.ipv4.tcp_wmem = 4096 8192 4194304
  • 表示发送套接字缓冲区大小的缺省值
    net.core.wmem_default = 8192
  • 表示接收套接字缓冲区大小的缺省值
    net.core.rmem_default = 8192
  • 表示发送套接字缓冲区大小的最大值
    net.core.rmem_max = 4194304
  • 表示接收套接字缓冲区大小的最大值
    net.core.wmem_max = 4194304
  • 关闭TCP连接中时间戳功能,影响 TIME-WAIT 快速回收
    net.ipv4.tcp_timestamps = 0
    • syn-ack握手状态重试次数
      net.ipv4.tcp_synack_retries = 2
    • 外向syn握手重试次数
      net.ipv4.tcp_syn_retries = 2
  • 丢弃活动连接之前的重传次数,超过次数视为掉线
    net.ipv4.tcp_retries2 = 3
  • 关闭ipv6 功能
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
  • 响应 ARP 请求
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_announce = 2
    -net.ipv4.conf.default.arp_announce = 2
  • 开启ipv4路由转发
    net.ipv4.ip_forward=1
  • 避免放大攻击
    net.ipv4.icmp_echo_ignore_broadcasts = 1
  • 开启多网卡下接受多播过滤(发给a网卡,b接受到了就被丢弃掉)
    -net.ipv4.conf.default.rp_filter = 1 (阿里云ecs不支持作为DR开启该功能)
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.eth0.rp_filter = 0
  • 不接受源路由
    net.ipv4.conf.default.accept_source_route = 0
  • 检查一次相邻层记录的有效性的周期
    net.ipv4.neigh.default.gc_stale_time = 120
  • 限制整个系统可以打开的文件描述符(file descriptors)的数量
    fs.file-max=65535

测试cdn

本文链接:

https://moxao.cn/archives/8/