Nginx教程之优化篇

一. 系统层面调优

  1. 调整进程打开的最大文件数量
    在/etc/security/limits.conf 最后增加:

    * soft nofile 65535
    * hard nofile 65535
    * soft nproc 65535
    * hard nproc 65535
    

    或者在/etc/profile中增加:

    ulimit -SHn 65535
    

    -H 代表硬限制, -S 代表软限制。

  2. 修改TCP最大连接数

    echo 100000 > /proc/sys/net/core/somaxconn
    
  3. TCP 链接立即回收与回用

    echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
    echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle	
    
  4. 优化内核配置
    在/etc/sysctl.conf中加入:

    # 系统中每一个端口最大的监听队列的长度
    net.core.somaxconn = 16384
    # TCP数据接收缓冲默认大小
    net.core.rmem_default = 256960
    # TCP数据发送缓冲默认大小
    net.core.wmem_default = 256960
    # TCP数据接收缓冲最大长度
    net.core.rmem_max = 513920
    # TCP数据发送缓冲最大长度
    net.core.wmem_max = 513920
    # 定义socket接收使用内存, 第一个值为socket接收缓冲区最少字节数; 
    # 第二个是缓冲区在系统负载不重的情况可以增长到的值; 第三个是接收缓冲区最大字节数 
    net.ipv4.tcp_rmem = 8760  256960  4088000
    # 定义socket发送使用内存, 第一个值为socket发送缓冲区最少字节数; 
    #第二个是缓冲区在系统负载不重的情况可以增长到的值; 第三个是接收缓冲区最大字节数 
    net.ipv4.tcp_wmem = 8760  256960  4088000
    # TCP 栈内存使用配置, 第一个值是内存使用下限, 第二个是内存压力模式应用的上限,
    # 第三个是内存使用的上限
    net.ipv4.tcp_mem = 131072  262144  524288
    # 对于还未获得对方确认的连接请求,  可保存在队列中的最大数量
    net.ipv4.tcp_max_syn_backlog = 2048
    # 网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
    net.core.netdev_max_backlog = 2000
    # 对于自身断开的socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)。对方可能会断开连接或一直不结束连接或不可预料的进程死亡
    net.ipv4.tcp_fin_timeout = 3
    # 对于还未获得对方确认的连接请求,可保存在队列中的最大数目
    net.ipv4.tcp_max_syn_backlog = 262144  
    # 是否允许将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP连接
    net.ipv4.tcp_tw_reuse = 1
    # 更快地回收TIME-WAIT套接字
    net.ipv4.tcp_tw_recycle = 1
    # 不属于任何进程的tcp socket最大数量. 超过这个数量的socket会被reset, 并同时告警. 
    # 这个参数是为了防御简单的DDOS攻击, 为了避免大量的告警信息, 可将这个参数调大些
    net.ipv4.tcp_max_orphans = 3276800
    # 是否打开TCP同步标签(syncookie),内核必须打开了CONFIG_SYN_COOKIES项进行编译,
    #同步标签可以防止一个套接字在有过多试图连接到达时引起过载。
    net.ipv4.tcp_syncookies = 1
    

    使用 sysctl -p 生效

二. Nginx调优配置

  1. Nginx进程配置:

    worker_processes 8
    

    根据CPU核心数设定, 一般设为2的倍数, 比如四核设为8

  2. Nginx 进程CPU分配

    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    

    与上面的worker_processes对应, 设为8, 则对应的是8个CPU内核分配.
    01表示启用第一个CPU内核,10表示启用第二个CPU内核, 有多少个核就对应多少个长度, 1表示开启该内核, 0表示关闭该内核.

  3. Nginx 进程打开的文件描述符数量

    worker_rlimit_nofile 65535
    

    Nginx 给各进程分配的请求并不均匀, 最好与ulimit -n的值保持一致。

  4. Nginx 事件处理模型

    events {
      use epoll;
      multi_accept on;
      worker_connections 65535;
    }
    

    采用epoll异步高效事件模型, 支持Linux内核2.6版本及以后的系统.
    multi_accept 设置on, 多个worker按串行方式来处理连接, 设置为off后,多个worker按并行方式来处理连接, 服务器吞吐量并发要求较大时可以设为off, 提升处理效率.
    worker_connections 代表每个进程的最大连接数.

  5. Nginx 传输配置优化

    keepalive_timeout 60;
    client_header_buffer_size 4k;
    pen_file_cache max=102400 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 1;
    

    keepalived_timeout设置连接超时时间, 超过服务器会主动断开.
    client_header_buffer_size 代表客户端请求头部的缓冲区大小, 跟随系统设置, 一般系统分页都要大于1k, 可以用命令getconf PAGESIZE查询.
    open_file_cache中的max代表缓存数量, 一般与进程的文件打开数保持一致; inactive是代表文件未被使用的失效时间.
    open_file_cache_valid 是指文件的有效性检查时间.
    open_file_cache_min_uses 文件的最少使用次数, 如果低于此值, 该文件将被移除.

  6. Nginx 高效传输配置:

    http{
    	sendfile on;
    	tcp_nopush on;
    }
    

    sendfile on代表高效传输文件模式, 普通应用一般设为on, 如果是频繁磁盘IO应用, 可以设置为off, 降低系统负载. (如果图片不能正常显示, 可以设置为off)
    tcp_nopush on必须在sendfile 为on开启时才生效, 防止网络阻塞, 减少网络报文段的数量(将响应头和正文的开始部分一起发送)

  7. gzip 调优配置
    Nginx安装需要开启ngx_http_gzip_module模块

    http {
    	gzip on;
    	gzip_min_length 2k;
    	gzip_buffers 4 32k;
    	gzip_http_version 1.1;
    	gzip_comp_level 6;
    	gzip_types text/plain application/x-javascript text/css application/xml;
    	gzip_vary on;
    	gzip_proxied any;
    }
    

    gzip on开启压缩功能
    gzip_min_length 设置允许压缩的页面最小字节数
    gzip_buffers 4 32k 压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存
    gzip_http_version为压缩版本
    gzip_comp_level 压缩比例, 1代表压缩比最小,处理速度最快,9压缩比最大, 但消耗CPU资源
    gzip_types 指定压缩的类型, 默认值是gzip_types text/html
    gzip_vary on 让前端的缓存服务器缓存经过GZIP压缩的页面, 比如用Squid缓存经过nginx压缩的数据
    gzip_proxied 根据某些头部标识决定是否压缩, any代表所有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦神-mirson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值