机器
:cpu2核,内存2G。
测试工具
:apache的ab做请求测试。
测试页面
:安装完的那个index.html
配置文件
:安装完默认的
说明
:以下的并发数值是运行不下于十遍得来了,不精确,但确实是有变化的。
ab -c 10000 -n 10000 http://192.168.247.140/
-n
:请求的次数
-c
:并发数
开启top,然后按1显示所有cpu。
# top
0.0% us
:用户空间占用CPU的百分比。
0.0% sy
:内核空间占用CPU的百分比。
0.0% ni
:改变过优先级的进程占用CPU的百分比
0.0% id
:空闲CPU百分比
0.0% wa
:IO等待占用CPU的百分比
0.0% hi
:硬中断(Hardware IRQ)占用CPU的百分比
0.0% si
:软中断(Software Interrupts)占用CPU的百分比
我虚拟机配置的是2核心,出现四个是因为逻辑cpu的缘故。
worker_processes
设置进程数,按CPU核数设置,默认的配置为1。
worker_processes 1;
当我们发送请求时,很明显的看出第一个核心有大的变化
但是呢,我配置的是2核心,所以改成2看看。
worker_processes 2;
第二核心,也有变化,只不过占用不多,因为程序结束了嘛。
worker_processes 4;
四个皆参与了处理。
但是呢,经过测试,开启2核心时,并发数约为1500,但是开启4核心时,并发数只有约1400。
经测试,1核心是最优,2核心时约1500。
为每个进程分配cpu,01
是第一个核心,10
是第二个核心。
worker_cpu_affinity 01 10;
当worker_processes
为2时,加上这个配置,和没加这个配置时并发数是一样的,约1500。
在把worker_processes
,置为1,会发现核心1几乎被用光了。
并发数可以达到约1700。
结果就是,越多核心参与处理,并发数就越少。
但是想想,核心1也要处理别的程序啊,我们不能为了这个并发数而全部占用,要是别的程序挂了怎么办?
所以按我的理解,这俩个配置就是为了使所有的cpu参与进去。
但是核心1和核心2差距很大。
所以,我们要使他们的处理量平衡。
我的方式是这样的
worker_cpu_affinity 10;
浮动20以内。并发数约1600。
没配置的话默认是走01,所以没有配置会高那么一丢丢,约70。
结论:
当worker_processes 1
并发数约为1600。
当worker_processes 2
并发数约为1500。
当worker_processes 1
+ worker_cpu_affinity 01 10
约为1700。
当worker_processes 2
+ worker_cpu_affinity 01 10
约为1500。
当worker_processes 2
+ worker_cpu_affinity 10
约为1600。