每个亚马逊实例类型的适当数量的Gunicorn工作人员是多少?

What is the appropriate number of Gunicorn workers for each Amazon Instance Type?

我目前正在尝试找出每种Amazon实例类型对应的工作人员数量。我曾经经营过一个枪械工人,但事实证明这相当缓慢。

许多开发人员目前正在使用此公式来衡量有多少工人适合:

1
NUM_WORKERS=3  #recommended formula here is 1 + 2 * NUM_CORES

我遇到的问题是,Amazon对于每个实例运行的核心数量并不十分清楚。例如,M1小实例有1个EC2计算单元(1个虚拟核心和1个EC2计算单元)

这本质上是什么意思?它有一个核心?或者它有两个核心?


我知道这是个老问题。但我想我对这个问题有一个更好的答案。Gunicorn Docs建议2n+1[gunicorn -w <2n+1> myapp:wsgi]对于工人数量是一个很好的猜测(是的,n=核心数量)。我想出了一个小小的shell脚本来应用这个公式。你需要做的就是:

1
gunicorn -w $(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 )) myapp:wsgi

命令的位置

1
cat /proc/cpuinfo | grep 'core id' | wc -l

将返回实际CPU核心的总数(n)。所以

1
$(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 ))

等于2n+1公式。

这将对所有基于Linux的机器应用2n+1公式。您不需要知道每种类型的实例或类似实例的工作人员数量。

参考:http://dhilipsiva.com/2015/10/22/appropriate-number-of-gunicorn-workers.html


基于Epicbrew的工作,下面介绍如何启动2n+1 Gunicorn Workers,其中n=CPU核心数量:

1
gunicorn --workers=$((2 * $(getconf _NPROCESSORS_ONLN) + 1)) wsgi:application

这在Linux和MacOS上都有效!约翰告诉所有博客的更多细节。


Amazon EC2 m1.small实例类型肯定只有一个虚拟内核;从线程/工作人员的角度来看,您可以完全忽略EC2计算单元(ECU)规范,并在Amazon EC2实例类型页面上按字面上列出的(虚拟)内核数乘以列出的CPU数(如果适用)(仅relevant表示集群实例)。

如果您希望避免进行数学运算和/或对该信息进行编程访问,您可能需要查看MissingCloud项目-aws.json数据集在实例类型集合中具有一个核心字段,例如:

1
2
3
4
5
6
7
8
9
10
11
12
"instance_types" : {
       "m1.small" : {
           "compute_units" : 1,
           "cores" : 1,
           "gpus" : 0,
           "ramMB" : 1700,
           "storageGB" : [10, 160],
           "i/o" :"moderate",
           "ebs_optimized_iopsMbps" : 0,
           "arch" : [32,64]},
        ...
}


查看检测到多少CPU的一个简单方法是运行top并按"1"显示CPU的数量。您将看到CPU0、CPU1、CPU2等。