1kという大変小さなファイルへのHTTPリクエストなので、preforkではリクエストが届くと同時にほぼ一気に全てのプロセスが活性化して ロードアベレージおよび実行中プロセス数が急上昇しています。実行中プロセス数は、MaxClientsの上限値=64にほぼ張り付いています。一方で、 event-1kの方ではあまり大きな上昇になっていません。これはそもそも処理の分散をプロセスではなくスレッドによって賄っているため、同時リクエス ト数の上昇がプロセス数の上昇としては現れないようになっていることを表しています。
このように、1kファイルのテストではpreforkとeventそれぞれの特性をよく表していると言って良いのではないでしょうか。64プロセス を事前に立ち上げて用意しておくことにより、バースト時には全てのプロセスが一気に動こうとするprefork MPMと、プロセス数は抑制しつつ、スレッドで捌くことによって過負荷状態を避けるevent MPMと、はっきりと違いが現れています。
これが10kから100kへと移ってくると、次第にネットワーク転送の方が律速となってきて、実行中プロセス数の極端な上がりは無くなります。おそ らくサーバの性能やネットワーク環境にもよるのでしょうが、preforkにおける負荷集中時の実行中プロセス数の急騰は、小サイズのファイルによって引 き起こされる可能性が高いということになります。
次にabの結果です。それぞれ秒間リクエスト処理数、および全体転送バイト数です。
- 1k Download
- prefork: 4913.44 reqs/sec - 6093.82 KB/sec
- event: 4561.75 reqs/sec - 5657.64 KB/sec
- 10k Download
- prefork: 3651.18 reqs/sec - 37396.49 KB/sec
- event: 3836.81 reqs/sec - 39297.67 KB/sec
- 100k Download
- prefork: 848.33 reqs/sec - 85042.92 KB/sec
- event: 853.21 reqs/sec - 85536.30 KB/sec
ネットワークI/Oとしての性能差はあまりないようです。10kと100kではeventが勝っており、ファイルが大きくなるにつれeventの方 が(若干)優勢であるという仮説が立てられそうな気もしますが、決して優位な差とは言えず、より多くのデータをとって検証を行う必要があります。
DSAS開発者の部屋:Apache MPMをめぐる冒険 〜eventとpreforkを比べてみるよ〜
