22

我目前正在尝试确定每种 Amazon 实例类型的适当工作人员数量。我曾经运行过一名 Gunicorn 工人,但事实证明这很慢。

许多开发人员目前正在使用这个公式来衡量多少工人是合适的:

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

我遇到的问题是亚马逊对每个实例运行的核心数量不太清楚。例如,一个 M1 小型实例有 1 个 EC2 计算单元(1 个虚拟核心和 1 个 EC2 计算单元)

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

4

4 回答 4

42

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

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

命令在哪里

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

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

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

等于 2n+1 公式。

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

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

于 2014-12-27T03:20:19.903 回答
21

epicbrew 的工作基础上,以下是如何启动 2N+1 个 Gunicorn 工作者,其中 N = CPU 内核数:

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

这适用于 Linux 和 macOS!有关John Tells All 博客的更多详细信息。

于 2016-07-29T20:22:13.483 回答
7

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

如果您想避免进行数学计算和/或以编程方式访问该信息,您可能需要查看missingcloud项目 - aws.json数据集在instance_types集合中具有 cores 字段,例如:

"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]},
        ...
}
于 2013-04-12T19:53:11.557 回答
3

查看检测到多少 cpu 的简单方法是运行 top 并按“1”以显示 cpu 的数量。您将看到 cpu0、cpu1、cpu2 等。

于 2013-04-13T07:06:21.697 回答