• nginx之系统参数优化


    系统参数优化

    默认的Linux内核参数考虑的是最通用场景,不符合用于支持高并发访问的Web服务器的定义,根据业务特点来进行调整,当Nginx作为静态web内容服务器、反向代理或者提供压缩服务器的服务器时,内核参数的调整都是不同的,此处针对最通用的、使Nginx支持更多并发请求的TCP网络参数做简单的配置,修改/etc/sysctl.conf来更改内核参数
    
    net.ipv4.ip_nonlocal_bind = 1
    #作为负载均衡服务器一定要开启(LVS、haproxy、nginx),允许某个服务监听在本机所没有的IP地址的端口上,如LVS的vip;作为负载均衡服务器不开启此参数,则服务是无法起来的。
    
    net.ipv4.ip_forward = 1 
    #开启ipv4转发功能,用于跨网段转发;负载均衡服务器一定要开启。
    
    net.ipv4.tcp_timestamps = 0
    #给报文添加时间戳,会对添加时间戳的报文做校验;作为web服务器可开启,作为负载均衡服务器一定要关闭。一个局域网内,都是用一个公网IP,如果访问一个网站的index.html资源,负载均衡服务器处理完一个请求后,又有第二个相同的IP访问相同网站的index.html,这时负载均衡服务器会把第二个报文校验完毕后,发现IP和请求的资源一致,会把报文抛弃掉,所以作为负载均衡服务器必须关闭此参数。
    
    net.ipv4.tcp_tw_reuse = 0
    #端口复用;依赖于net.ipv4.tcp_timestamps参数,如果net.ipv4.tcp_timestamps开启,则net.ipv4.tcp_tw_reuse生效,如果没开启,则此参数也不生效。
    #参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,这对于服务器来说意义重大,因为总有大量TIME_WAIT状态的链接存在;用于TCP连接。
    
    net.ipv4.tcp_tw_recycle = 0 
    #快速回收TIME_WAIT状态,用于大量TIME_OUT场景;依赖于net.ipv4.tcp_timestamps参数。
    #这个参数用于设置启用timewait快速回收;开启后,用户如果正在看网页,过会儿再点,会发现断开连接,会重新TCP三次握手建立连接。
    
    fs.file-max = 1000000
    #表示单个进程最多可以打开的文件描述符的数量。
    
    net.ipv4.tcp_keepalive_time = 600
    #当keepalive启动时,TCP发送keepalive消息的频度;默认是2小时,将其设置为10分钟,可更快的清理无效链接。
    
    net.ipv4.tcp_fin_timeout = 30
    #当服务器主动关闭链接时,socket保持在FIN_WAIT_2状态的较大时间。
    
    net.ipv4.tcp_max_tw_buckets = 5000
    #表示操作系统允许TIME_WAIT套接字数量的较大值,如超过此值,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为8000,过多的TIME_WAIT套接字会使Web服务器变慢。
    
    net.ipv4.ip_local_port_range = 1024 65000
    #定义UDP和TCP链接的本地端口的取值范围。
    
    net.ipv4.tcp_rmem = 10240 87380 12582912
    #定义了TCP接受socket请求缓存的内存最小值、默认值、较大值。
    
    net.ipv4.tcp_wmem = 10240 87380 12582912
    #定义TCP发送缓存的最小值、默认值、较大值。
    
    net.core.netdev_max_backlog = 8096
    #当网卡接收数据包的速度大于内核处理速度时,会有一个列队保存这些数据包。这个参数表示该列队的较大值。
    
    net.core.rmem_default = 6291456
    #表示内核套接字接受缓存区默认大小。
    
    net.core.wmem_default = 6291456
    #表示内核套接字发送缓存区默认大小。
    
    net.core.rmem_max = 12582912
    #表示内核套接字接受缓存区较大大小。
    
    net.core.wmem_max = 12582912
    #表示内核套接字发送缓存区较大大小。
    注意:以上的四个参数,需要根据业务逻辑和实际的硬件成本来综合考虑。
    
    net.ipv4.tcp_syncookies = 1
    #与性能无关。用于解决TCP的SYN攻击。
    
    net.ipv4.tcp_max_syn_backlog = 8192
    #这个参数表示TCP三次握手建立阶段接受SYN请求列队的较大长度,默认1024,将其设置的大一些可使出现。
    Nginx繁忙来不及accept新连接时,Linux不至于丢失客户端发起的链接请求。
    
    net.core.somaxconn = 262114
    #选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此需要结合高并发请求数来调节此值。
    
    net.ipv4.tcp_max_orphans=262114
    #选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立链接将立即被复位并输出警告信息。这个限制指示为了防止简单的DOS攻击,不用过分依靠这个限制甚至认为的减小这个值,更多的情况是增加这个值。
  • 相关阅读:
    (0.12)elasticsearch分布式集群原理(ES7.9)
    (0.9)elasticsearch分布式集群概念
    mysql分库分表【转】
    (0.11)elasticsearch常用查询,REST API的基本约定,ES增删查改
    mysql全日志自动化脚本
    Java虚拟机--类加载的过程
    Java虚拟机--运行时数据区域
    新题型|结构不良题
    恒等变形的是与非
    分形图与二阶数列
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/12081453.html
Copyright © 2020-2023  润新知