1|2高速処理の秘訣はイベント駆動Nginxが大量のリクエストでも同時に高速処理できるのは、イベント駆動方式を採用しているためです。Webサーバーのように同時に複数の処理を行うには、ディスクやネットワークといったI/Oの多重化が必要になります。I/O多重化の実装には「select」や「poll」といったシステムコールが従来使われています。HTTPでプロセスベースやスレッドベースのMPM(マルチプロセッシングモジュール、注6)を選択すると、こうしたシステムコールが使用されます。select/pollでは、プログラムがアクセスするファイルネットワークソケットなどをOSが識別するための「ファイルディスクリプター」を1つ1つチェックします。チェックするディクリプタが増えれば処理にかかる時間も比例(注7)して長くなり、同時リクエスト数が2倍になれば処理に掛かる時間も2倍に膨らみます。Niginxのイベント型では、I/O多重化を実装するのに「epoll」システムコールを使用します。epollではディスクリプターの状態がカーネル内で管理されるため、プログラムが1つ1つチェックする必要がなくなります。この場合、処理にかかる時間はリクエストによらず一定(注8)になります。そのためNginxは、万単位のリクエストも高速に効率良く処理することができます。メモリの使用量が少ないのも特徴です。HTTPのプロセスベースやスレッドベースのMPMでは、リクエストを処理するのにプロセスやスレッドを起動するため、使用するメモリもリクエスト数に応じて増加します。Nginxは単一プロセスで全てのリクエストを処理するため(注9)、リクエスト数に応じてメモリ使用量が変化することはありません。Nginxの省リソースの恩恵は、数万単位のリクエストを処理するような大規模サイトだけではなく、組み込みPCやマイクロサーバーのように限られたリソースしか使用できない状況にも有効です。処理数nに比例して計算量が増える場合「0(n)」と表記します。処理数によらず計算量が一定の場合「0(1)」と表記します。Nginxのプロセス数はCPUやコア数に増減できます。Nginxの主な機能Nginxの主な機能は次の通りです(以下、「http://nginx.org/ja/」より抜粋)。HTTPの性能を比較してみましょう。HTTPのベンチマークソフト「ApacheBench」で評価を行います。結果はコンテンツの種類、ネットワーク環境やサーバー構成などで変わるため、ここでの結果は参考程度に留めてください。abコマンドをリスト1のように実行します。「-n」で総リクエスト数を、「-c」で同時接続数を指定します。second」に注目することにします。abコマンドの使用方法サーバー/クライアントのスペックは表1の通りです。1.4.6」を使用します。2.4.7」を使用し、MPMにはpreforkを別途インストールしています。MPMで差が分かるようにしています。250」としています。計測に利用したサーバーとクライアントのスペック総リクエストを1万、同時接続数を100とした場合の比較は図4の通りです。コンテンツには50KBのJPEG画像を使用しました。結果はNginxの方が一割ほど多くのリクエストを処理しています。HTTPは数十MBほど消費していました。同時接続数:100、総リクエスト:10000の場合の平均リクエスト数/秒(編集部注:初出時、誤解を招くグラフ表示となっておりました。HTTPは劇的に悪くなりました。Nginxが同時リクエスト数が増えても、処理能力に大きな変化がないことが分かります。使用メモリも計測したところ、同時接続数が増えても消費メモリは数MBと変化がありませんでした。HTTPは、同時接続数が増えるとメモリの消費量も増える傾向にあり、最大で100MBを超える消費が観測されました。次回予告Nginxの概要に続き次回はインストール方法や設定方法について解説します。Nginxは動作が軽量なだけでなく、設定の容易さもライト級です。大学在学中から地元ISPの立ち上げに係わり、紆余曲折を経て通信キャリアに勤務。企画からコーディングやインフラ構築まで幅広い業務に従事。@ITには2001年から数多くの記事を寄稿。第3版』(翔泳社/共著)、『PHPによるWebアプリケーションスーパーサンプル〜リッチクライアント編〜』(ソフトバンククリエイティブ/共著)ほか多数。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。