每种 Amazon 实例类型的适当 Gunicorn 工作人员数量是多少?

Posted

技术标签:

【中文标题】每种 Amazon 实例类型的适当 Gunicorn 工作人员数量是多少?【英文标题】:What is the appropriate number of Gunicorn workers for each Amazon Instance Type? 【发布时间】:2013-04-05 10:58:11 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

在 epicbrew's 工作的基础上,这里是如何启动 2N+1 个 Gunicorn 工作人员,其中 N = CPU 内核数:

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

这适用于 Linux 和 macOS!更多详情请关注John Tells All blog.

【讨论】:

【参考方案2】:

我知道这是一个老问题。但我认为我对这个问题有更好的答案。 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

【讨论】:

gunicorn.conf.py 导入多处理; worker = multiprocessing.cpu_count() * 2 + 1 docs.gunicorn.org/en/19.3/configure.html @kev 所以建议使用 .py 而不是 gunicorn.service 文件? @Mr-Programs 不确定它是什么文件类型,但它(仍然)在官方文档中:docs.gunicorn.org/en/19.9.0/configure.html 为什么不简单地使用$(( 2 * `nproc` + 1 )) 来获取可用处理单元的数量? @Faheel,不知道有这样的命令存在:P【参考方案3】:

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

【讨论】:

【参考方案4】:

Amazon EC2m1.small 实例类型肯定只有一个虚拟核心;从线程/工作人员的角度来看,您可以完全忽略 EC2 计算单元 (ECU) 规范,将Amazon EC2 Instance Types 页面上列出的(虚拟)核心数量乘以列出的 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],
        ...

【讨论】:

您为什么建议不要以编程方式获取此信息? gunicorn 文档甚至以编程方式完成

以上是关于每种 Amazon 实例类型的适当 Gunicorn 工作人员数量是多少?的主要内容,如果未能解决你的问题,请参考以下文章

EC2 实例类型的确切网络性能?

将多态成员变量实例化为适当的类型

在 Amazon EC2 AWS 上更改实例类型后会出现啥问题?

Amazon Web Service(Elastic Beanstalk) 实例类型 t2.large 中的多个请求运行状况下降

有没有更好的方法来声明一个 CStringT<> 的 char 类型的适当实例而不是

Amazon EC2 的名词解释