worker_cpu_affinityとworker_processes

nginxには「worker_cpu_affinity」という設定があります。

https://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity

複数CPUを搭載したマシンの場合、「worker_cpu_affinity」を設定することで特定のCPUにnginxの処理を割り振ることができます。

CPUが4つあるサーバの場合には「worker_processes」を「4」とします。

そのうえで、worker_cpu_affinityを「1000 0100 0010 0001」のようにします。

わかりづらいのですが、「1000」と4つ並んでいるのがCPUを表しており、この場合は1つ目のCPUで処理をさせるということになります。

ちなみに、3つのCPUの場合は以下のようになります。

なお、worker_processを「auto」にすることで、自動的に搭載CPUの数に設定してくれます。

しかも、嬉しいことに「worker_cpu_affinity」の設定を入れなとも自動的にすべてのCPUを使用するようにしてくれます。

3CPUを搭載したカモトラのサーバで確認してみます。

「worker」でgrepしていますが「worker_cpu_affinity」は表示されません。(設定していません)

続けて、psコマンドで確認してみます。

CPU番号を確認する際には、「-o」オプションを使い、「psr」を付与します。

このpsr、おそらく「ProceSsoR」の太文字の箇所ですね。

今回はプロセスID(pid)、プロセス名(comm)も一緒に表示します。

「1」が2つ、「2」が1つ、「0」が1つ表示されます。

「1」が2つ表示されていますが、そのうちの1つ「10284」はmaster processです。

3つのworker processが3つのCPUに割り振られていることがわかります。

以上から、搭載したCPUすべてでnginxの処理をさせたい場合、「worker_processes auto;」を設定すれば、「worker_cpu_affinity」の設定は不要ということがわかります。

もちろん、一部のCPUのみでnginxを処理させたい場合は、「worker_cpu_affinity」の設定が必要です。

自身の環境に合わせて設定しましょう!

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする