我目前正在尝试确定每个Amazon实例类型的适当工作人数。我曾经经营过一名Gunicorn工人,但事实证明这很慢。
许多开发人员目前正在使用此公式来衡量合适的工人数量:
NUM_WORKERS=3 #recommended formula here is 1 + 2 * NUM_CORES
我遇到的问题是,亚马逊对每个实例运行的核心数量并不十分清楚。例如,M1小实例有1个EC2计算单元(1个虚拟核心,1个EC2计算单元)
这基本上是什么意思?它有一个核心?或者它有两个核心?
答案 0 :(得分:29)
我知道这是一个老问题。但我想我对这个问题有了更好的答案。 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
答案 1 :(得分:15)
在epicbrew's工作的基础上,这里是如何启动2N + 1 Gunicorn工作者,其中N = CPU核心数:
gunicorn --workers=$((2 * $(getconf _NPROCESSORS_ONLN) + 1)) wsgi:application
这适用于Linux和macOS!关于John Tells All blog.
的更多细节答案 2 :(得分:6)
Amazon EC2 m1.small
实例类型肯定只有一个虚拟核心;从线程/工作人员的角度来看,您可以完全忽略 EC2计算单元(ECU)规范,并在Amazon EC2 Instance Types页面上按字面意义获取列出的(虚拟)核心数量乘以列出的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]},
...
}
答案 3 :(得分:3)
查看检测到多少cpu的简单方法是运行top并按“1”以显示cpu的数量。你会看到cpu0,cpu1,cpu2等。