您的位置:首页 > 运维架构 > Nginx

优化绑定不同的Nginx进程到不同CPU上

2018-02-10 09:56 567 查看

参考资料

[1]. 跟老男孩学Linux运维:Web集群实战,老男孩

安装过程

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

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

## 编辑文件
[root@www ~]# vim /application/nginx/conf/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段
## 重启
[root@www ~]# /application/nginx/sbin/nginx -t
[root@www ~]# /application/nginx/sbin/nginx -s reload

## 安装测试软件 webbench
yum install -y gcc ctags #先安装编译需要的组件
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz tar zxvf webbench-1.5.tar.gz #解压Webbench
cd webbench-1.5 #进入webbench目录
mkdir /usr/local/man ←建立相应目录(否则导致无法正常安装)
make
make install #编译安装

## 实际测试
c:客户端个数
t:持续时间,如果不设置t参数,默认是执行30秒
webbench --help  获取帮助文档
注:网址的最后面必需添加 /,例如 https://www.baidu.com/ [root@www ~]# webbench -c 10000 -t 18 http://127.0.0.1/ 
每秒钟响应请求数:24525 pages/min,每秒钟传输数据量20794612 bytes/sec.
注意:webbench 做压力测试时,该软件自身也会消耗CPU和内存资源,为了测试准确,请将 webbench 安装在别的服务器上。(另外开一台机器进行测试)
1. 压力测试工作应该放到产品上线之前,而不是上线以后

2. 测试时尽量跨公网进行,而不是内网

3. 测试时并发应当由小逐渐加大,比如并发100时观察一下网站负载是多少、打开是否流程,并发200时又是多少、网站打开缓慢时并发是多少、网站打不开时并发又是多少

4. 应尽量进行单元测试,如B2C网站可以着重测试购物车、推广页面等,因为这些页面占整个网站访问量比重较大

八核CPU服务器的参数配置参考如下:

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;
worker_cpu_affinity参数的官方说明如下:

syntax: worker_cpu_affinity cpumask.....        #此行为cpu亲和力参数语法,cpumask为cpu掩码
default:    ---     #默认不配置
context:    main        #此行为worker_cpu_affinty参数可以放置的位置
worker_cpu_affinity的作用是绑定不同的worker进程到一组CPU上。通过设置bitmask控制允许使用的CPUS,默认worker进程不会绑定到任何CPUS。

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 directive is only available on FreeBSD and Linux.
绑定第一个Ningx工作进程到CPU0/CPU2,第二个绑定到 CPU1/CPU3,第三个例子是适合超级线程的。这个例子仅仅适合在 FreeBSD 和 Linux 系统
From : http://nginx.org/en/docs/ngx_core_module.html[/code] 
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: