nginxのプロセス
nginxは起動時に2種類のプロセスを起動します。
実際にnginxが起動している状態でプロセスを見てみます。
rootで動作しているmasterプロセスと、nginxで動作しているworkerプロセスがあります。
# ps aux | grep nginx
root 1295 0.0 0.2 47336 2236 ? Ss 13:38 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 3561 0.0 0.2 47340 2296 ? S 22:49 0:00 nginx: worker process
nginx 3562 0.0 0.2 47340 2288 ? S 22:49 0:00 nginx: worker process
masterプロセスはその名の通りworkerプロセスを起動して管理しているプロセスで設定の読み込みやソケットの管理を行います。
workerプロセスはクライアントからのリクエストを処理していきます。
apacheがマルチプロセスモデルでclientからのリクエストに対して1プロセスを起動するのに対して、nginxはイベント駆動アーキテクチャを採用しており、リクエストを1プロセス・1スレッドで処理していきます。workerプロセスが2つ起動している場合は2つのプロセス2スレッドでアクセスを捌いていきます。プロセスをたくさん起動しなくて済むのでサーバのメモリなどのリソースが節約できます。
workerプロセスを調整する
workerプロセス数はnginx.confので設定できます。
# cat /etc/nginx/nginx.conf | grep worker
worker_processes auto;
worker_connections 1024;
worker_processesの値で1と指定すればworkerプロセス数は1になります。autoとするとnginx側でcpuコア数に設定してくれます。
autoにしておくと勝手に調整してくれるのでサーバをリプレースした時に設定忘れでパフォーマンスが制限されてしまうと行った事態を防ぐことができるので便利です。
一般的にworker process数はCPUのコア数と同じくらいに設定し、超えないようにするのが良いと言われています。
cpuコア数はlscpuを使うと確認できます。
# lscpu | grep CPU\(s\):
CPU(s): 2
NUMA node0 CPU(s): 0,1
workerプロセスはcpuコア数以上に設定したほうが良い場合もあるそうなのでそのあたりはチューニングをしてみると良いでしょう。