根据参数优化nginx的服务性能

Posted 我的城市没有海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据参数优化nginx的服务性能相关的知识,希望对你有一定的参考价值。

一、优化nginx服务的worker进程数

 在高并发、高访问量的Web服务场景,需要事先启动好更多的nginx进程,以保证快速响应并处理大量并发用户的请求。

1)、优化nginx进程对应的配置

优化nginx进程对应nginx服务的配置参数如下

cat nginx.conf
worker_processes  1;    #指定了nginx要开启的进程数,结尾的数字就是进程的个数;

 上述参数调整的是nginx服务的worker进程数,nginx有master进程和worker进程之分,master进程为管理进程,真正使用的是worker进程。

2)、优化nginx进程个数的策略

 搭建服务器时,worker进程数最开始的设置可以等于CPU的核数,且worker进程数要多一些,这样起始提供服务时就不会出现因为访问量快速增加而临时启动新进程提供服务的问题,缩短了系统的瞬时开销和提供服务的时间,提升了服务用户的速度。高流量高并发场合也可以考虑将进程数提高至CPU核数*2,具体情况要根据实际的业务来选择,因为这个参数除了要和CPU核数匹配外,也和硬盘存储的数据及系统的负载有关,设置为CPU的核数是一个好的起始配置,这也是官方的建议。

 3)、查看Web服务器CPU硬件资产信息

查看CPU总颗数:
[[email protected] conf]# grep ‘physical id‘ /proc/cpuinfo|sort|uniq|wc -l
1

查看CPU总核数:
[[email protected] conf]# grep processor /proc/cpuinfo |wc -l
4

4)、 修改nginx配置

假设服务器的CPU颗数为1颗,核数为1核,则初始法人配置可以通过查看默认的nginx.conf里的worker_processes数来了解,命令如下:

[[email protected] conf]# grep worker_processes nginx.conf
worker_processes  1;

 这里修改参数值为CPU的总核数4,然后从新加载nginx服务。

[email protected] conf]# vim nginx.conf
[[email protected] conf]# grep worker_processes nginx.conf
worker_processes  4;

 重新加载nginx服务并检查修改后的worker进程数量如下:

[[email protected] conf]# systemctl reload nginx
[[email protected] conf]# ps -ef|grep nginx|grep -v grep
root        748      1  0 8月31 ?       00:00:00 nginx: master process /application/nginx/sbin/nginx
www        1451    748  0 00:05 ?        00:00:00 nginx: worker process
www        1452    748  0 00:05 ?        00:00:00 nginx: worker process
www        1453    748  0 00:05 ?        00:00:00 nginx: worker process
www        1454    748  0 00:05 ?        00:00:00 nginx: worker process

从"worker_processes  4"可知,worker的进程数为4个。nginx的master主进程不包含在这个参数内,nginx master的主进程为管理进程,负责调度和管理worker进程。
有关worker_processes参数的官方说明如下:
syntax:    worker_processes number;    #此行为参数语法,number为数量;
default:   worker_processes  1;          #此行意思是不配置改参数,软件默认情况数量为1;
context:    main                                  #此行为worker_processes参数可以放置的位置;
worker_processes 为定义worker进程数的数量,建议设置为CPU的核数或CPU核数*2,具体情况要根据实际的业务来选择,因为这个参数除了要和CPU核数匹配外,也和硬盘存储的数据及系统的负载有关,设置为CPU的核数是一个好的起始配置。
From:http://nginx.org/en/docs/ngx_core_module.html

 二、优化绑定不同的nginx进程到不同的CPU上

默认情况下,nginx的多个进程有可能跑在某一个CPU或CPU的某一核上,导致nginx进程使用硬件的资源不均本次的优化时尽可能的分配不同的nginx进程给不同的CPU处理,达到充分有效利用硬件的多CPU多核资源的目的。

在优化不同的nginx进程对应不同的CPU配置时,四核CPU服务器的参数配置参考如下:

[[email protected] conf]# grep worker nginx.conf
worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;

worker_cpu_affinity就是配置nginx进程与CPU亲和力的参数,即把不同的进程分给不同的CPU处理。这里0001 0010 0100 1000是掩码,分别代表第1、2、3、4核CPU,由于worker_processes进程数为4,因此,上述配置会把每一个进程分配一核CPU处理,默认情况下进程不会绑定任何CPU,参数位置为main段。

 worker_cpu_affinity参数的官方说明如下:

Syntax: 	worker_cpu_affinity cpumask ...;    #此行为CPU亲和力参数语法,cpumask为CPU掩码;
worker_cpu_affinity auto [cpumask]; 
Default: 	—                     #默认不设置
Context: 	main                   #此行为worker_cpu_affinity参数可以放置的位置;

 worker_cpu_affinity的作用是绑定不同的worker进程数到一组CPU上,通过设置bitmask控制进程允许使用的CPU,默认worker进程不会绑定到任何CPU。

下面是绑定的示例配置:

 Binds worker processes to the sets of CPUs. Each CPU set is represented by a bitmask of allowed CPUs. There should be a separate set defined for each of the worker processes. By default, worker processes are not bound to any specific CPUs.

For example,

    worker_processes    4;
    worker_cpu_affinity 0001 0010 0100 1000;

binds each worker process to a separate CPU, while

    worker_processes    2;
    worker_cpu_affinity 0101 1010;

binds the first worker process to CPU0/CPU2, and the second worker process to CPU1/CPU3. The second example is suitable for hyper-threading.

The special value auto (1.9.10) allows binding worker processes automatically to available CPUs:

    worker_processes auto;
    worker_cpu_affinity auto;

The optional mask parameter can be used to limit the CPUs available for automatic binding:

    worker_cpu_affinity auto 01010101;

    The directive is only available on FreeBSD and Linux. 

翻译如下:

将工作进程绑定到CPU组。每个CPU集由允许的CPU的位掩码表示。应该为每个工作进程定义一个单独的集合。默认情况下,工作进程不绑定到任何特定的CPU。

例如,

worker_processes 4; 
worker_cpu_affinity 0001 0010 0100 1000;
将每个工作进程绑定到一个单独的CPU,同时

worker_processes 2; 
worker_cpu_affinity 0101 1010;
将第一个工作进程绑定到CPU0 / CPU2,将第二个工作进程绑定到CPU1 / CPU3。第二个例子适用于超线程。

特殊值auto(1.9.10)允许将工作进程自动绑定到可用的CPU:

worker_processes auto; 
worker_cpu_affinity auto;
可选的mask参数可用于限制可用于自动绑定的CPU:

worker_cpu_affinity auto 01010101;
该指令仅适用于FreeBSD和Linux。 From:http://nginx.org/en/docs/ngx_core_module.html

 四、nginx时间处理模型优化

nginx的

 

以上是关于根据参数优化nginx的服务性能的主要内容,如果未能解决你的问题,请参考以下文章

nginx优化

linux下nginx服务应用总结--突破10万高并发的nginx性能优化经验(含内核参数优化

Nginx安全优化与性能调优

Nginx优化之服务性能优化

nginx性能优化及内核参数调整

基于Nginx实现10万+并发,你应该做的Linux内核优化