vlambda博客
学习文章列表

NGINX 优化方法论(一)

1、优化方法论

从软件层面提升硬件使用效率

-增大CPU的利用率 

-增大内存的利用率 

-增大磁盘10的利用率 

-增大网络带宽的利用率

提升硬件规格

-网卡:万兆网卡,例如10G25G40G等 

-磁盘:固态硬盘

-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就可以同时运行多个进程?

NGINX 优化方法论(一)

2、减入进程间切换

NGINX 优化方法论(一)

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

NGINX 优化方法论(一)

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

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

CPU在运行的时候,如果一颗CPU始终固定的去运行同一个进程,当用户连接到进程的时候,用固定的CPU响应用户的请求,CPU中有缓存,就可以重复的使 CPU中缓存的数据。如果进程一开始运行在第一颗CPU上,运行一会跑到第二颗CPU上,就意味着原来的缓存信息在第二颗CPU上无法使用,还需要重新加 载,带来资源的浪费,影响效率

Context: main

3Nginx 事件处理模型优化

Nginx 的连接处理机制在不同的操作系统中会采用不同的 I/O 模型,在 linux 下,Nginx 使用 epoll I/O 多路复用模型,在 Freebsd 中使用 kqueue I/O 路复用模型 不过这个选项没必要设置,因为nginx会自动选择最有效的方法作为默认项