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

noa*_*ale 16 worker-process worker amazon-ec2 amazon-web-services gunicorn

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

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

NUM_WORKERS=3  #recommended formula here is 1 + 2 * NUM_CORES
Run Code Online (Sandbox Code Playgroud)

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

这基本上意味着什么?它有一个核心?或者它有两个核心?

dhi*_*iva 32

我知道这是一个老问题.但我想我对这个问题有了更好的答案.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
Run Code Online (Sandbox Code Playgroud)

哪里有命令

cat /proc/cpuinfo | grep 'core id' | wc -l
Run Code Online (Sandbox Code Playgroud)

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

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

等于2n + 1公式.

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

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

  • **gunicorn.conf.py**导入多处理; workers = multiprocessing.cpu_count()*2 + 1 http://docs.gunicorn.org/en/19.3/configure.html (7认同)
  • 为什么不简单地使用 `$(( 2 * \`nproc\` + 1 ))` 来获取可用处理单元的数量? (3认同)

joh*_*all 16

基于epicbrew的工作,这里是如何启动2N + 1 Gunicorn工作者,其中N = CPU核心数:

gunicorn --workers=$((2 * $(getconf _NPROCESSORS_ONLN) + 1)) wsgi:application
Run Code Online (Sandbox Code Playgroud)

这适用于Linux和macOS!关于John Tells All博客的更多细节.


Ste*_*pel 6

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

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

"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]},
        ...
}
Run Code Online (Sandbox Code Playgroud)