nginx优化专题–进程数worker_cpu_affinity
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。
配置Nginx多核CPU,worker_cpu_affinity使用方法和范例
首先了解我们服务器CPU的信息
cpu的信息配置在/proc/cpuinfo中查询
1:查询物理的CPU个数 (为4个)
[xxxx conf]$ cat /proc/cpuinfo | grep ‘physical id’
physical id : 0
physical id : 0
physical id : 1
physical id : 1
physical id : 2
physical id : 2
physical id : 3
physical id : 3
2:查询每个物理CPU对于的逻辑核数
[xxxx conf]$ cat /proc/cpuinfo | grep ‘cpu cores’
cpu cores : 2
cpu cores : 2
cpu cores : 2
cpu cores : 2
cpu cores : 2
cpu cores : 2
cpu cores : 2
cpu cores : 2
3: 如1 2 查询,cpu是多线层, 为8 个, inter的cpu支撑多线程,有时会超过8.
[xxxx conf]$ cat /proc/cpuinfo | grep ‘processor’
processor : 0
processor : 1
processor : 2
processor : 3
processor : 4
processor : 5
processor : 6
processor : 7
4: 也可以通过top命令查询时间的cpu逻辑核数
Cpu(s): 14.5%us, 2.6%sy, 0.0%ni, 82.4%id, 0.0%wa, 0.0%hi, 0.4%si, 0.0%st 为8 个
现在开始配置nginx的关于进程数的配置worker_cpu_affinity
1. 2核CPU,开启2个进程
worker_processes 2;
worker_cpu_affinity 01 10;
01表示启用第一个CPU内核,10表示启用第二个CPU内核
worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。
2. 2核CPU,开启4个进程
worker_processes 4;
worker_cpu_affinity 01 10 01 10;
开启了四个进程,它们分别对应着开启2个CPU内核
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推
worker_processes 2;
worker_cpu_affinity 0101 1010;
0101表示开启第一个和第三个内核,1010表示开启第二个和第四个内核
2个进程对应着四个内核
worker_cpu_affinity配置是写在/etc/nginx/nginx.conf里面的。
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
配置完毕后,重启nginx ,执行/etc/init.d/nginx restart
测试nginx是否有用到多个CPU内核 ,在另一台机器上执行ab.exe -c 1000 -n 1000 http://www.domain.com/index.php
ab.exe是装apache后带的一个性能测试工具,它可以模拟多客户端的并发请求。
在服务器上执行top,然后按1,就可以看到CPU内核的工作情况。如果多个CPU内核的利用率都相差不多,证明nginx己经成功的利用了多核CPU。
测试结束后,CPU内核的负载应该都同时降低。