- worker调优
worker是Nginx的进程,一个worker理论上可以处理几万个请求,为了更好利用Nginx的缓存机制,让worker运行在固定的CPU上,从而减少worker切换CPU时造成的性能消耗。worker的数量并不是越多越好,worker的数量一般配制与物理CPU的物理核心数相同。
- CPU在LINUX的编号
CPU物理核心编号由一个8位的二进制串表示,0000 0001表示第一个物理核心,0000 0010表示第二个核心,0000 0100表示第三个物理核心。第八号物理核心表示为1000 0000。
- Nginx 配制worker与CPU绑定
nginx.conf 配制如下
worker_processes 2;
worker_cpu_affinity 0001 0010;
将两个worker绑定在第一、二个CPU物理核心上。
- worker nice值的调整(worker进程的优先级调整)
worker的优先级是通过worker_priority参数调整的,其取值范围为[-20, 20]。
worker_processes 2;
worker_cpu_affinity 0001 0010;
worker_priority 19;
虽然worker的nice值最大为20,实际上只以到达19,当超出20这个值时,用nginx -t进得测试已经报出配制异常,但nginx仍然能以19的优先级启动。
- worker_rlimit_number调优
worker_rlimit_number,用于限制nginx单个进程最大的并发量。假设2个worker最大并发量为3W,那么单个worker的并发量为1.5W。这里worker_rlimit_number应该调整为15000
注意:默认情况下,此参数不在nginx.conf文件里出现,需要手动添加配置。
配置如下:
worker_processes 2;
worker_cpu_affinity 0001 0010;
worker_priority 19;
worker_rlimit_number 15000;
- event事件驱动相关配制
events{
worker_connections 102400;
accept_mutex on | off;
}
worker_connections:每个worker支持的最大连接并发量。
如果accept_mutex设置成on,则请求由各worker轮流处理。如果设置成off,则一个请求过来,会通知所有的worker,哪个worker处理的请求少,则由哪个worker处理请求。因为accept_mutex值为off时,会通知所有的worker,因此比较消耗性能。
- server模块相关配制
server_tokens
server_tokens在http模块或server模块里设置。在http模块设置,则作用于所有server模块。在server模块设置,则只作用于单个server模块。当server_tokens的值为off时,将不对外暴露nginx版本信息,有利于避开不良用户针对nginx不对版本的漏洞攻击
http{
server_tokens off;
}