Apache と Nginx
Apache の性質上 C10K 問題が発生してしまう。クライアント1万台問題というもので、同時接続するクライアントが多いとキャパシティを超えてしまうこと。例えばプロセス番号の割り当ては約3万。Apache は1リクエストに対して1プロセスを生成するので、プロセス番号が同時接続数の上限になる。サーバ自体のキャパシティに問題がなくても、ソフトウェア的な上限が決まっている。
Nginxは1プロセスで複数のリクエストを処理できる。プロセス内での同時接続数を設定可能で、全体のキャパシティは プロセス数xプロセス内での同時接続数になる。
シングルスレッドのNginxは動的コンテンツなどの重たい処理には向かない。同時処理数が増える時はシングルスレッドのほうが有利。メモリ使用量も増えない。マルチプロセスだとリクエストが増えるとメモリ消費量も増える。
ApacheとNginxを比較!それぞれのメリット・デメリットを解説
Nginx の設定項目
【Nginx】ちょっと時間を掛けてチューニングしてみた。 を参考に設定値について。
worker_processes
workerプロセスの数を指定。CPUコア数を超えないように設定する。autoにすると自動的に設定してくれる。
CPUコア数は nproc などで確認できる。
worker_connections
1つのworkerプロセスの同時接続数の上限。nginxをリバプロとして使う場合はクライアントからの接続とプロキシとしての接続の2接続になることに注意。
8コアで worker_connections を1024に設定すると8192接続まで可能になる。
worker_rlimit_nofile
workerプロセスが開くファイル数の上限。OSのファイルディスクリプタ数 / worker_processes を超えないように指定する。
ファイルディスクリプタ数は次のように確認できます。
OS全体で開けるファイル数。
cat /proc/sys/fs/file-max
1プロセスで同時に開けるファイル数。デフォルトでは1024
ulimit -n