Linux Centos7内核参数优化(K8S内核优化)
2023-04-10 本文已影响0人
Chris0Yang
针对系统
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