美文网首页
Linux Centos7内核参数优化(K8S内核优化)

Linux Centos7内核参数优化(K8S内核优化)

作者: Chris0Yang | 来源:发表于2023-04-10 10:29 被阅读0次

    针对系统

    cat /etc/sysctl.conf
    ###表示系统级别的能够打开的文件句柄的数量。直接限制最大并发连接数。
    ###是对整个系统的限制,并不是针对用户的。
    ###ulimit -n 控制进程级别能够打开的文件句柄的数量。
    ###提供对shell及其启动的进程的可用文件句柄的控制。这是进程级别的。
    1. fs.file-max = 202808  #grep -r MemTotal /proc/meminfo | awk  '{printf("%d",$2/10)}'
    
    ###当每个网络接口接受数据包的速率比内核处理速率快时,允许发送到队列的数据包的最大数。
    ###默认值为300
    2. net.core.netdev_max_backlog = 262144
     
    ###调节系统同时发起的TCP连接数。高并发情况下,该值越小,越容易出现超时情况。
    ###默认值为128
    3. net.core.somaxconn = 262144
    
    ###设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上。
    ###为了防止简单的DOS攻击。如果超过这个数字,孤立链接将立即被复位并输出警告信息。
    ###默认值为65535
    4. net.ipv4.tcp_max_orphans = 262144
    
    ###记录尚未收到客户端确认信息的连接请求的最大值(三次握手建立阶段接受SYN请求)
    ###设置大一些可使出现Nginx繁忙来不及接收新连接时,Linux不至于丢失客户端发起的链接请求。
    ###128M内存的服务器参数值为1024。
    ###默认值为1024
    5. net.ipv4.tcp_max_syn_backlog = 262144
     
    ###设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数据(三次握手中的第二次握手)
    ###当为1时,内核在放弃连接之前再发送一次SYN+ACK包。
    ###默认值为5
    6. net.ipv4.tcp_synack_retries = 1
     
    ###设置内核放弃建立连接之前向客户端发送SYN包的数据。
    ###默认值为5
    7. net.ipv4.tcp_syn_retries = 1
     
    ###放大本地端口范围。
    ###默认值为32768 61000
    8. net.ipv4.ip_local_port_range = 15000 65000
    
    ###表示某个TCP连接在空闲7200秒后,内核才发起探测,探测9次(每次75秒)不成功,内核才发送RST。
    ###清理无效链接。对服务器而言,默认值比较大,可结合业务调整。
    ###默认值为75/9/7200。
    9. net.ipv4.tcp_keepalive_intvl = 60
       net.ipv4.tcp_keepalive_probes = 3
       net.ipv4.tcp_keepalive_time = 1500
     
    ###启用Cookies来处理,可防范部分 SYN 攻击,当出现 SYN 等待队列溢出时也可继续连接。
    ###但开启后会使用 SHA1 验证 Cookies,理论上会增大 CPU 使用率。
    ###默认值为0
    10. net.ipv4.tcp_syncookies = 1
     
    ###如果socket由服务端要求关闭,则该参数决定了保持在FIN-WAIT-2状态的时间。
    ###默认值为60
    11. net.ipv4.tcp_fin_timeout = 30
     
    ###timewait的数量,最大值为262144。 如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
    ###建议减小避免TIME_WAIT状态过多消耗整个服务器的资源,但也不能太小,跟后端的处理速度有关.
    ###如果速度快可以小,速度慢则适当加大,否则高负载会有请求无法响应或非常慢。
    ###默认值为180000
    12. net.ipv4.tcp_max_tw_buckets = 6000
     
    #设置时间戳,避免序列号的卷绕。当为0时,禁用对于TCP时间戳的支持,针对Nginx服务器来说,建议关闭。
    #默认值为1
    13. net.ipv4.tcp_timestamps = 0
    
    ###TCP连接中TIME-WAIT的sockets快速回收功能。
    ###同时开启的话,缓存每个连接最新的时间戳,若后续的请求中时间戳小于缓存的时间戳时,该请求会被视为无效,导致数据包会被丢弃。
    ###不建议打开
    ###tcp_tw_recycle默认值为0
    14. net.ipv4.tcp_tw_recycle = 0
        net.ipv4.tcp_timestamps = 0
     
    ###允许将TIME-WAIT状态的sockets重新用于新的TCP连接
    ###Nginx反向代理服务器(服务器即做客户端,也做server端时)
    ###tcp_tw_reuse默认值为0
    15. net.ipv4.tcp_tw_reuse = 1
        net.ipv4.tcp_timestamps = 1
     
    ###以下4个参数,需要根据业务逻辑和实际的硬件成本来综合考虑
    ###内核接收套接字缓冲区大小的最大值(以字节为单位)
    ###缺省设置:110592
    16. net.core.rmem_default = 6291456
     
    ###内核发送套接字缓冲区大小的缺省值(以字节为单位)
    ###可参考的优化值:873200/1746400/3492800
    ###缺省设置:110592
    17. net.core.wmem_default = 6291456
     
    ###内核接收套接字缓冲区大小的最大值(以字节为单位)
    ###缺省设置:131071
    18. net.core.rmem_max = 12582912
     
    ###内核发送套接字缓冲区大小的最大值(以字节为单位)
    ###缺省设置:131071
    19. net.core.wmem_max = 12582912
     
    ###TCP接收socket请求缓存的内存最小值、默认值、最大值
    20. net.ipv4.tcp_rmem = 10240       87380   12582912
     
    ###TCP发送socket请求缓存的内存最小值、默认值、最大值
    21. net.ipv4.tcp_wmem = 10240       87380   12582912
    

    针对用户

    cat /etc/security/limits.conf
    ### *表示所有用户、soft表示可以超出,但只是警告;hard表示绝对不能超出,unlimited用于表示不限制
    ### 最大用户进程数
    * soft nproc 65536
    * hard nproc 65536
    ### 最大打开文件描述符,默认值为1024
    * soft nofile 65536
    * hard nofile 65536
    ### 最大锁定内存地址空间
    ### * soft memlock unlimited
    ### * hard memlock unlimited
    

    针对K8S调整内核参数

    cat /data/kubernetes.conf
    #此参数表示TCP发送keepalive探测消息的间隔时间(秒)
    net.ipv4.tcp_keepalive_time=600 
    
    #tcp检查间隔时间(keepalive探测包的发送间隔)
    net.ipv4.tcp_keepalive_intvl=30 
    
    #tcp检查次数(如果对方不予应答,探测包的发送次数)
    net.ipv4.tcp_keepalive_probes=10  
    
    #禁用IPv6,修为0为启用IPv6
    net.ipv6.conf.all.disable_ipv6=1 
    
    #禁用IPv6,修为0为启用IPv6
    net.ipv6.conf.default.disable_ipv6=1 
    
    #禁用IPv6,修为0为启用IPv6
    net.ipv6.conf.lo.disable_ipv6=1 
    
    #ARP缓存条目超时
    net.ipv4.neigh.default.gc_stale_time=120 
    
    #默认为1,系统会严格校验数据包的反向路径,可能导致丢包
    net.ipv4.conf.all.rp_filter=0  
    
    #不开启源地址校验
    net.ipv4.conf.default.rp_filter=0 
    
    #始终使用与目的IP地址对应的最佳本地IP地址作为ARP请求的源IP地址
    net.ipv4.conf.default.arp_announce=2 
    
    #始终使用与目的IP地址对应的最佳本地IP地址作为ARP请求的源IP地址
    net.ipv4.conf.lo.arp_announce=2 
    
    #始终使用与目的IP地址对应的最佳本地IP地址作为ARP请求的源IP地址
    net.ipv4.conf.all.arp_announce=2 
    
    #定义网络连接可用作其源(本地)端口的最小和最大端口的限制,同时适用于TCP和UDP连接
    net.ipv4.ip_local_port_range= 45001 65000 
    
    #其值为0,说明禁止进行IP转发;如果是1,则说明IP转发功能已经打开
    net.ipv4.ip_forward=1 
    
    #配置服务器 TIME_WAIT 数量
    net.ipv4.tcp_max_tw_buckets=6000 
    
    #此参数应该设置为1,防止SYN Flood
    net.ipv4.tcp_syncookies=1 
    
    #表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包),进行重试的次数(默认为5)
    net.ipv4.tcp_synack_retries=2 
    
    #是否在ip6tables链中过滤IPv6包
    net.bridge.bridge-nf-call-ip6tables=1 
    
    #二层的网桥在转发包时也会被iptables的FORWARD规则所过滤,这样有时会出现L3层的iptables rules去过滤L2的帧的问题
    net.bridge.bridge-nf-call-iptables=1 
    
    #连接跟踪表的大小,建议根据内存计算该值CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (x / 32),并满足nf_conntrack_max=4*nf_conntrack_buckets,默认262144
    net.netfilter.nf_conntrack_max=2310720 
    
    #gc_thresh3 是表大小的绝对限制
    #gc_thresh2 设置为等于系统的最大预期邻居条目数的值
    #在这种情况下,gc_thresh3 应该设置为一个比 gc_thresh2 值高的值,例如,比 gc_thresh2 高 25%-50%,将其视为浪涌容量。
    #gc_thresh1 提高到较大的值;此设置的作用是,如果表包含的条目少于 gc_thresh1,内核将永远不会删除(超时)过时的条目。
    net.ipv6.neigh.default.gc_thresh1=8192
    net.ipv6.neigh.default.gc_thresh2=32768
    net.ipv6.neigh.default.gc_thresh3=65536
     
    net.core.netdev_max_backlog=16384    # 每CPU网络设备积压队列长度
    net.core.rmem_max = 16777216         # 所有协议类型读写的缓存区大小
    net.core.wmem_max = 16777216         # 最大的TCP数据发送窗口大小
    net.ipv4.tcp_max_syn_backlog = 8096  # 第一个积压队列长度
    net.core.somaxconn = 32768           # 第二个积压队列长度
    fs.inotify.max_user_instances=8192   # 表示每一个real user ID可创建的inotify instatnces的数量上限,默认128.
    fs.inotify.max_user_watches=524288   # 同一用户同时可以添加的watch数目,默认8192。
    fs.file-max=52706963                 # 文件描述符的最大值
    fs.nr_open=52706963                  #设置最大微博号打开数
    kernel.pid_max = 4194303             #最大进程数
    net.bridge.bridge-nf-call-arptables=1 #是否在arptables的FORWARD中过滤网桥的ARP包
    vm.swappiness=0                       # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
    vm.overcommit_memory=1                # 不检查物理内存是否够用
    vm.panic_on_oom=0                     # 开启 OOM
    vm.max_map_count = 262144
    

    相关文章

      网友评论

          本文标题:Linux Centos7内核参数优化(K8S内核优化)

          本文链接:https://www.haomeiwen.com/subject/pswiddtx.html