Apacheを学ぶ - プロセス

Apacheのプロセスは以下の3つのモードで動く。
# eventなんて存在自体知らなかった・・・。

  • prefork
  • worker
  • event

prefork

マルチプロセス。
スレッドを使わず、先行してfork(プロセス起動)を行なう。
とりあえずプロセスを立ち上げる。足りなくなったら追加する。forkするコストはworker(スレッド)より大きい。そりゃ当たり前だ。

メリット

forkされた子プロセスがリクエストを処理する。そのため、あるプロセスがフリーズしても、他のプロセスへの影響が少ない。

デメリット

同時リクエスト数が増えれば、プロセス数が増える。
プロセス数が増えれば、処理が重くなる。

worker

マルチスレッド+マルチプロセス
プロセスで複数のスレッドを動かし、各スレッドがリクエストを処理する。

メリット

スレッドでリクエストを処理するので、プロセス数を減らせる。
プロセスが減れば、使用リソースを減らせる。

デメリット

Apache2.0の最初のころは、けっこう不安定だったらしい。
2.2では試してないのでわからない。負荷評価とかしてみたいな。

event

eventはworkerの一種でマルチスレッドで動作する。workerとの違いはKeep-Alive(持続的接続)の処理方法である。 workerやpreforkは、Keep-Aliveの持続性を保つために一度利用したスレッド・プロセスをそのまま待機させている。しかしクライアントからの接続が持続的に行われる可能性は保証されているわけではないから、待機していること自体が無駄になる可能性もある。そこで、Keep-Aiveの処理を別のスレッドに割り振って通信を処理する。
なお、この方式は実験中のため実使用は控えるべきである。
# ドキュメントが英語で、よくわからないからWikipediaをそのまま引用


すでに疲れたので、今日はここまで。本当は具体的な設定まで書きたかったけど、飛ばしすぎるとあとが続かないので。