java架构师培训:如何优化Nginx 本身的一些配置

2021年01月08日 16:01

35

    Nginx本身的一些配置也需要进行调优,下面我们来详细看下。

java架构师培训:如何优化Nginx 本身的一些配置

    调高keepalive连接最大请求数


    Nginx针对client和upstream的keepalive连接,均有keepalive_requests这个参数来控制单个keepalive连接的最大请求数,且默认值均为100。当一个keepalive连接中请求次数超过这个值时,就会断开并重新建立连接。


    如果是IntranetIngress,则单个客户端的QPS可能会相对较大。例如,如果达到10,000QPS,Nginx可能会频繁断开与客户端建立的keepalive连接,然后将生成大量TIME_WAIT状态连接。我们应尽量避免生成大量的TIME_WAIT连接。因此,建议此高并发方案应增加Nginx与客户端之间的保持连接的最大请求数。NginxIngress的配置对应于keep-alive-requests,可以设置为10000,参考:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#keep-alive-requests


    同样的,Nginx与upstream的keepalive连接的请求数量的配置是upstream-keepalive-requests,参考:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#upstream-keepalive-requests


    但是,一般情况应该不必配此参数,如果将其调高,可能导致负载不均,因为Nginx与upstream保持的keepalive连接过久,导致连接发生调度的次数就少了,连接就过于"固化",使得流量的负载不均衡。


    调高keepalive最大空闲连接数


    Nginx针对upstream有个叫keepalive的配置,它不是keepalive超时时间,也不是keepalive最大连接数,而是keepalive最大空闲连接数。


    它的默认值为32,在高并发下场景下会产生大量请求和连接,而现实世界中请求并不是完全均匀的,有些建立的连接可能会短暂空闲,而空闲连接数多了之后关闭空闲连接,就可能导致Nginx与upstream频繁断连和建连,引发TIME_WAIT飙升。在高并发场景下可以调到1000,参考:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#upstream-keepalive-connections


    调高单个worker最大连接数


    max-worker-connections控制每个worker进程可以打开的最大连接数,TKE环境默认16384,在高并发环境建议调高,比如设置到65536,这样可以让nginx拥有处理更多连接的能力,


  推荐阅读:jvm培训:如何判断哪些对象需要回收?


更多鲁班学院java高级培训免费课程试听地址https://www.lubanjava.com/course.html

鲁班学院java高级培训课程https://www.lubanjava.com/course/detail/519.html

加群即可领取鲁班学院最新Java高级培训课程资料学习包 群号:700541970



咨询(2)
免费试听
领取优惠
加群交流

扫一扫
加群领取架构师资料

售后反馈
返回顶部