ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

Nginxでworker_processesの割り当てはCPU数以上の設定が可能か?

最近、仕事で無料で利用できるリバースプロキシのNginxをさわる機会が多いので、情報を整理しています。
 
無料で使えるので導入している会社も多いと思います。
 
静的ページの処理が得意なのと、バックエンドのサーバーの負荷を減らすことができることや、サーバを隠蔽できるなど、メリットが色々とあります。以前の現場でも、ユーザー側にサーバーを直接接続させたくないという話があって、リバースプロキシの話があがったことがありました。商用を使うか、フリーを使うかは会社の事情によって変わってくるとは思いますが。

続いて、Nginxですが、デフォルトの設定だとそれほどパフォーマンスがでないようになっていて、ある程度、環境に合わせてチューニングが必要です。
 
ということで、Nginxについては、デフォルトの設定からパフォーマンスのチューニングをしたほうがいいのですが、そのnginxの設定の一つで、worker_processesをCPUコア数よりも多く割り当てると効率がいいという内容が書かれたブログがありました。

例えば、CPUに1ソケット、3コアが割り当てられているNginxサーバーに対して、worker_processesが9とか設定することになります。
 
これについて、あるブログでは、実際のコア数よりも多くの値、2倍~3倍の値を設定するとパフォーマンスが出ると書かれていました。

ただ、公式サイトをチェックするとそんな記述はなくて、基本はコア数と同数の値を指定することになるのではないかと思います。

そして、「worker_processes」の設定については、公式サイトの情報が参考になります。
 
 
 
特殊な値auto(1.9.10)を使用すると、ワーカープロセスを使用可能なCPUに自動的にバインドできます。

【設定例】
worker_processes auto;
worker_cpu_affinity auto;

公式サイトに書かれていましたが、worker_processesはautoが推奨と書かれていたと思います。また、worker_cpu_affinityこの設定を入れることで、コアの割り当てを均等にしてくれます。デフォルトだと偏りがあったと思います。

このあたりの設定の妥当性は別途、テストサーバーを自宅に構築してローカル検証してみます。また、autoに設定しておくメリットとしては、コア数に応じてNginxが自動で割り当てを設定してくれるので便利です。