nginx优化配置及方法论

一、优化方法论
从软件层面提升硬件使用效率
-增大CPU的利用率 -增大内存的利用率 -增大磁盘10的利用率 -增大网络带宽的利用率
提升硬件规格
-网卡:万兆网卡,例如10G、25G、40G等 -磁盘:固态硬盘 -CPU :更快的主频,更多的核心,更大的缓存,更优的架构 

二、Nginx相关优化配置

 1、如何增大Nginx使用CPU的有效时长

  能够使用全部CPU资源
        . master-worker多进程架构

       . worker进程数量应当大于等于CPU核数

 Nginx进程间不做无用功浪费CPU资源

       . worker进程不应在繁忙时,主动让出CPU  

            . worker进程间不应由于争抢造成资源耗散    

                     . worker进程数量应当等于CPU核数    

           . worker进程不应调用一些API导致主动让出CPU  

                     . 比如使用openresty调用第三方模块

 不被其他进程争抢资源

         . 提升优先级占用CPU更长的时间    

        . 减少操作系统上耗资源的非Nginx进程

 设置worker进程的数量
       通过合理的设置worker的进程数量,提高cpu利用率,cpu设置等于或者小于核数
       查看cpu核数的方法 grep "processor" /proc/cpuinfo |wc -l
       Syntax: worker processes number auto; Default: worker_processes 1; Context: main
     

为何一个CPU就可以同时运行多个进程?


    - 宏观上并行,微观上串行  

             - 把进程的运行时间分为一段段的时间片

              - OS调度系统依次选择每个进程,最多执行时间片指定的时长



     - 阻塞API引发的时间片内主动让出CPU

              -速度不一致引发的阻塞API    

              -硬件执行速度不一致,例如CPU和磁盘
 
     - 业务场景产生的阻塞API  

             -例如同步读网络报文

 2、尽可能减少进程间切换
     

    -何为进程间切换    

          • 是指CPU从一个进程或线程切换到另一个进程或线程  

          • 类别

                   • 主动切换  

                   • 被动切换:时间片耗尽

           • Cost: <5us

     - 减少主动切换

     - 减少被动切换   

             • 增大进程优先级

  2.1减少被动进程间切换的配置-设置worker进程优先级

增大worker进程的时间片,通过设置优先级赖减入被动切换


什么决定CPU时间片的大小?  

在默认情况下,最小时间片是5ms,最大则有800ms  

进程分配的CPU时间片大小也与优先级有关,优先级越高,时间片越长      

Nice静态优先级:-20 - 19 静态优先级越小越不友好则时间片越长,可以通过top程序看到
 

设置worker进程的静态优先级

Syntax: worker_priority number; 

Default: worker_priority 0;

Context: main

2.2、减入被动进程间切换的配置-为进程绑定cpu


nginx默认是没有开启利用多核cpu的配置的。需要通过增加worker_cpu_affinity配置参数来充分利用多核cpu


当CPU在运行的时候,如果一颗CPU始终固定的去运行同一个进程,当用户连接到进程的时候,用固定的CPU响应用户的请求,

CPU中有缓存,就可以重复的使 用CPU中缓存的数据。如果进程一开始运行在第一颗CPU上,运行一会跑到第二颗CPU上,就

意味着原来的缓存信息在第二颗CPU上无法使用,还需要重新加 载,带来资源的浪费,影响效率

绑定Nginx worker进程到指定的CPU内核

Syntax: worker_cpu_affinity cpumask
         
worker_cpu_affinity auto [cpumask];
 
Default: -; 

Context: main

3、Nginx 事件处理模型优化
Nginx 的连接处理机制在不同的操作系统中会采用不同的 I/O 模型,在 linux 下,Nginx 使用 epoll 的 I/O 多路复用模型,在

Freebsd 中使用 kqueue 的 I/O 多 路复用模型 不过这个选项没必要设置,因为nginx会自动选择最有效的方法作为默认项

Syntax: use method; 

Default: — 

Context:  events

4.单个进程允许的客户端最大连接数

通过调整控制连接数的参数来调整 Nginx 单个进程允许的客户端最大连接数,更多的worker的connection数量对会占用更多的内

存,一般一个connection约232字 节,而且event也约96字节,一个连接就是232+96*2

Syntax: worker_connections number; 

Default: 1024 

Context:  events

5.配置Nginx worker进程最大打开文件数

Syntax: worker_rlimit_nofile  number; 

Default:   —

Context:  events


上面两个参数都受最大文件句柄数限制,当运行的服务需要大并发进程运行时,如果不够,就会报出“too many open files”

file-max是内核可分配的最大文件数可通过 cat /proc/sys/fs/file-max 查看

nr_open是单个进程可分配的最大文件数 可通过 cat /proc/sys/fs/nr_open 查看

但是也不是不可修改可通过编辑/proc/sys/fs/file-max 修改 echo 30296 > /proc/sys/fs/file-max 单个进程分配文件数如上操作

 

6.修改用户的最大文件句柄数限制

 

临时修改 ulimit -HSn limit


永久修改 vi /etc/security/limits.conf


-H选项和-S选项分别表示对给定资源的硬限制(hard limit)和软限制(soft limit)进行设置。


硬限制(hard limit)一旦被设置以后就不能被非root用户修改,软限制(soft limit)可以增长达到硬限制(hard limit)。


如果既没有指定-H选项也没有指定-S选项,那么硬限制(hard limit)和软限制(soft limit)都会被设置。


总结

 a.所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max

 b.单个进程打开的文件描述符数不能超过user limit中nofile的soft limit  

 c.nofile的soft limit不能超过其hard limit  

 d. nofile的hard limit不能超过/proc/sys/fs/nr_open

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值