nginxのworker_processesをCPUコア数よりも多く割り当てると効率がいい?

フリーで使えるリバースプロキシとして、Nginxを利用している企業も多いと思います。静的ページの処理が得意なのと、バックエンドのサーバーの負荷を減らすことができることや、サーバを隠蔽できるなど、メリットが色々とあります。

 

有償版は多機能なので、構成に応じて使用できます。


そして、Nginxはデフォルトの設定だとそれほどパフォーマンスがでません。ということで、Nginxについては、バックエンドのサーバーに対してある程度のアクセスがあるデフォルトの設定からパフォーマンスのチューニングをしたほうがいいのですが、以前から気になっていた設定で、nginxのworker_processesをCPUコア数よりも多く割り当てると効率がいいのかということです。


なぜ、この疑問があるかというと、ある既存サーバの設定で実際のコア数よりも大きい数字が設定されていたからです。


例えば、1CPU4コアのNginxサーバーに対して、worker_processesが12とか設定されている感じです。これについて、あるブログでは、実際のコア数よりも多くの値、2倍~3倍の値を設定するとパフォーマンスが出ると書かれたものがありました。


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

 


そして、「worker_processes」の設定については、公式サイトの情報が参考になります。

http://nginx.org/en/docs/ngx_core_module.html


個人的にはこの値を設定すればいいのではないかと考えています。

特殊な値auto(1.9.10)を使用すると、ワーカープロセスを使用可能なCPUに自動的にバインドできます。


【設定例】

worker_processes auto;
worker_cpu_affinity auto;


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


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