nginx调优

一、nginx的主配置优化
1.设置进程静态优先级

(1)如果进程在CPU的时间片较长,那么它的执行优先级更高;

 

(2)进程的静态优先级NICE值(-20~19)越小,优先级越高。

top,可以查看所有进程的静态优先级;

top -u nginx,可以查看nginx的静态优先级;

 

nginx.conf:

worker_priority -20;

 

2.设置worker进程数

多核CPU,进程的数量一般大于CPU核心数,但是在nginx的体系中,worker进程是用来处理用户请求的进程,避免多个worker进程争抢一颗CPU,所以最好设置成<=CPU核心数。

lscpu,查看CPU信息

 

 

nginx.conf:

worker_processes auto|自定义值;

 

3.CPU绑定提供缓存命中率

将worker进程与CPU核心进行绑定,以便更好地利用CPU的多级缓存。

 

现在的CPU一般会有三级缓存,一级L1缓存速度最好,二级L2次之,三级L3最慢;

其中L1与L2为单插槽上单核CPU独享,L3则是单插槽上多核CPU共享。

 nginx调优

 

 

 nginx调优

 

根据2.worker_processes设置的绑定CPU核心数

nginx.conf:

#绑定四核CPU的4个CPU:

worker_processes 4;

   worker_cpu_affinity 0001  0010  0100  1000;

 

#绑定八核CPU的2个CPU:

worker_processes 2;

worker_cpu_affinity 00000001  00000010;

 

#两个worker进程绑定4核CPU的4个CPU:

#第一个worker进程被绑定到CPU0/CPU2;

#第二个worker进程被绑定到CPU1/CPU3;

worker_processes 2;

worker_cpu_affinity 0101  1010;

 

4.worker进程间的负载均衡

accept_mutex参数:如果启用,该参数表示多个worker进程间顺序接收新连接,关闭   的话则会让所有worker进程同时被唤醒,但只有一个worker进程   能接收处理该请求。

nginx.conf:

accept_mutex: off;

 nginx调优

 

 

 

5.单个worker进程允许同时打开的连接数(高并发核心)

通过配置worker_connections来修改单个worker进程可以同时打开的连接数,默认是512,需要调大该值,但不能超过worker_rlimit_nofile。

 

connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。

1.内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,通过数学公式可以算出100000个连接数大概会占用 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占用的nginx。

2.进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,

nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;

设置ulimits:ulimit -SHn 65535

 

nginx.conf:

worker_connections 512;

6.所有worker进程允许同时打开的文件数(高并发核心)

一般worker_rlimit_nofile表示所有worker进程可以打开的文件句柄数,该值默认值未设置,将会受到系统级,用户级限制(注意:nginx worker进程的默认用户是nginx)。

nginx.conf:

worker_rlimit_nofile 自定义值;

 

7.使用epoll事件模型

 

上一篇:[源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader


下一篇:线程的基础