文档简介:
概述
内核参数调优
调高连接队列的大小
server {listen 80 backlog=1024;...
backlog=numbersets the backlog parameter in the listen() call that limits the maximum length for
the queue of pending connections. By default, backlog is set to -1 on FreeBSD,
DragonFly BSD, and macOS, and to 511 on other platforms.
sysctl -w net.core.somaxconn=65535
扩大源端口范围
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
TIME_WAIT 复用
sysctl -w net.ipv4.tcp_tw_reuse=1
调大最大文件句柄数
sysctl -w fs.file-max=1048576
配置示例
initContainers:- name: setsysctlimage: busyboxsecurityContext:privileged: truecommand:- sh- -c- |sysctl -w net.core.somaxconn=65535sysctl -w net.ipv4.ip_local_port_range="1024 65535"sysctl -w net.ipv4.tcp_tw_reuse=1sysctl -w fs.file-max=1048576
全局配置调优
调高 keepalive 连接最大请求数
Nginx 针对 client 和 upstream 的 keepalive 连接,具备 keepalive_requests 参数来控制单个
keepalive 连接的最大请求数,默认值均为100。当一个 keepalive 连接中请求次数超过默认值时,将断开并重新建立连接。
如果是内网 Ingress,单个 client 的 QPS 可能较大,例如达到10000QPS,Nginx 将可能频繁断开跟
client 建立的 keepalive 连接,并产生大量 TIME_WAIT 状态连接。
为避免产生大量的 TIME_WAIT 连接,建议您在高并发环境中增大 Nginx 与
client 的 keepalive 连接的最大请求数量,在 Nginx Ingress 的配置对应 keep-alive-requests,
可以设置为10000,详情请参见 keep-alive-requests。
同样,Nginx 针对 upstream 的 keepalive 连接的请求数量的配置是 upstream-keepalive-requests,
配置方法请参见 upstream-keepalive-requests。
在非高并发环境,不必配此参数。如果将其调高,可能导致负载不均,因 Nginx 与 upstream 保持的
keepalive 连接过久,导致连接发生调度的次数减少,连接过于“固化”,将使流量负载不均衡。
调高 keepalive 最大空闲连接数
Nginx 针对 upstream 可配置参数 keepalive。该参数为最大空闲连接数,默认值为320。
在高并发环境下将产生大量请求和连接,而实际生产环境中请求并不是完全均匀,
有些建立的连接可能会短暂空闲,在空闲连接数多了之后关闭空闲连接,
将可能导致 Nginx 与 upstream 频繁断连和建连,引发 TIME_WAIT 飙升。
在高并发环境下,建议将 keepalive 值配置为1000,详情请参见 upstream-keepalive-connections。
调高单个 worker 最大连接数
max-worker-connections 控制每个 worker 进程可以打开的最大连接数,TKE 环境默认为16384。
在高并发环境下建议调高该参数值,例如配置为65536,
调高该值可以让 Nginx 拥有处理更多连接的能力,详情请参见 max-worker-connections。
配置示例
apiVersion: v1kind: ConfigMapmetadata:name: nginx-ingress-controller# nginx ingress 性能优化: https://www.nginx.com/blog/tuning-nginx/data:# nginx 与 client 保持的一个长连接能处理的请求数量,默认100,高并发场景建议调高。# 参考: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#keep-alive-requestskeep-alive-requests: "10000"# nginx 与 upstream 保持长连接的最大空闲连接数 (不是最大连接数),默认 320,在高并发下场景下调大,避免频繁建联导致 TIME_WAIT 飙升。# 参考: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#upstream-keepalive-connectionsupstream-keepalive-connections: "2000"# 每个 worker 进程可以打开的最大连接数,默认 16384。# 参考: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#max-worker-connectionsmax-worker-connections: "65536"