私は現在、Amazonインスタンスタイプごとに適切なワーカー数を把握しようとしています。以前は1人のGunicornワーカーを実行していましたが、それはかなり遅いことがわかりました。
現在、多くの開発者がこの式を使用して、適切なワーカーの数を測定しています。
NUM_WORKERS=3 #recommended formula here is 1 + 2 * NUM_CORES
私が抱えている問題は、Amazonが各インスタンスが実行しているコアの数について完全に明確ではないということです。たとえば、M1スモールインスタンスには1つのEC2コンピューティングユニットがあります(1つの仮想コアと1つのEC2コンピューティングユニット)
それは本質的にどういう意味ですか?コアが1つあるということですか?それとも2つのコアがあるということですか?
Amazon EC2m1.small
インスタンスタイプには間違いなく1つの仮想コアしかありません。スレッド化/ワーカーの観点からは、EC2 Compute Unit(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]},
...
}
私はこれが古い質問であることを知っています。しかし、私はこの質問に対するより良い答えがあると思います。 Gunicornのドキュメントでは、2n + 1 [gunicorn -w <2n+1> myapp:wsgi
]は、ワーカー数の適切な推測です(はい、n =コアの数)。この式を適用するための小さなシェルスクリプトを思いつきました。あなたがする必要があるのはこれです:
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
epicbrew の動作に基づいて、2N + 1 Gunicornワーカーを起動する方法を次に示します。ここで、N = CPUコアの数です。
gunicorn --workers=$((2 * $(getconf _NPROCESSORS_ONLN) + 1)) wsgi:application
これはLinuxとmacOSの両方で機能します! John Tells Allブログの詳細
検出されたCPUの数を確認する簡単な方法は、topを実行し、「1」を押してCPUの数を表示することです。 cpu0、cpu1、cpu2などが表示されます。