NGINX 优化方法论(一)
1、优化方法论
从软件层面提升硬件使用效率
-增大CPU的利用率
-增大内存的利用率
-增大磁盘10的利用率
-增大网络带宽的利用率
提升硬件规格
-网卡:万兆网卡,例如10G、25G、40G等
-磁盘:固态硬盘
-CPU :更快的主频,更多的核心,更大的缓存,更优的架构
-内存:更快的访问速度
2、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就可以同时运行多个进程?
2、减入进程间切换
2.1、减入被动进程间切换的配置-设置worker进程优先级
2.2、减入被动进程间切换的配置-为进程绑定cpu
nginx默认是没有开启利用多核cpu的配置的。需要通过增加worker_cpu_affinity配置参数来充分利用多核cpu
当CPU在运行的时候,如果一颗CPU始终固定的去运行同一个进程,当用户连接到进程的时候,用固定的CPU响应用户的请求,CPU中有缓存,就可以重复的使 用CPU中缓存的数据。如果进程一开始运行在第一颗CPU上,运行一会跑到第二颗CPU上,就意味着原来的缓存信息在第二颗CPU上无法使用,还需要重新加 载,带来资源的浪费,影响效率
Context: main
3、Nginx 事件处理模型优化
Nginx 的连接处理机制在不同的操作系统中会采用不同的 I/O 模型,在 linux 下,Nginx 使用 epoll 的 I/O 多路复用模型,在 Freebsd 中使用 kqueue 的 I/O 多 路复用模型 不过这个选项没必要设置,因为nginx会自动选择最有效的方法作为默认项