kakts-log

programming について調べたことを整理していきます

nginxの利点

個人環境でnginxを使うようになったので、nginxを使う上での利点について軽く整理する。

nginxの主な用途

なぜnginxはリクエストを高速にさばけるのか

一般的に、同時に複数の処理をさばくためには、ディスクやネットワークなどのI/O多重化が必要。
nginxでは、I/O多重化を実現するためにepollシステムコールを使用している。 epollにおいては、ファイルディスクリプタの状態をカーネル内部で管理するために、プログラム側で1つ1つチェックする必要が無いため、 同時リクエスト数が増えたとしても処理にかかる時間は一定になる。
以上のことから、nginxは万を超える単位のリクエストも効率よく処理することができる

Apatch httpサーバではどうなのか

Apache HTTPを代表とする、プロセス・スレッドベースのマルチプロセッシングモジュール(以下、MPM)はソケットの管理に、select pollシステムコールが使われる。 これはnginxで使われているepollとは異なり、ファイルディスクリプタをプログラムが1つ1つチェックするために、処理時間が同時リクエスト数に比例する。

同時リクエスト数とメモリ使用量に関して

nginxでは、単一プロセスでリクエストをさばくので、メモリ使用量が変化することはない。
それに対して、Apache HTTPなどのMPMでは、同時リクエストのたびにプロセスやスレッドを起動するために、使用メモリ量も比例して増加する。