【Apache】並列処理の仕組みとチューニング方法をまとめてみた。

Apacheとは

OSSのデファクトスタンダートとなっているWebサーバのミドルウェアとなります。最近だとnginxやlighttpd等の別のミドルウェアが使われるようになってきてはいますが、まだまだApacheを使っているシステムが大多数だと思っております。インフラエンジニアとしては抑えておくことは必須です。

Apacheの並行処理の仕組み

ApacheにはMPM(Multi Processing Module)と呼ばれるモジュールがあり、本モジュールを使うことで並行処理を実現することができます。MPMには大きくpreforkと呼ばれるモデルとworkerと呼ばれるモデルがありますので、それぞれ説明していきます。

prefork
Apacheの親プロセスから派生する子プロセスを事前に複数生成しておき、クライアントからの接続に備えるマルチプロセスモデルとなります。本方式は、プロセス間でメモリを直接共有することがないので、プログラミングの内容がシンプルになります。

worker
子プロセスの中にさらにスレッド(※1)に分割する方式となります。preforkと比較するとメモリ等のリソース使用率を抑えることができるので、大規模システムにおいてはworkerを用いることが多いです。ただし、メモリ空間を複数のスレッドで共有するので、リソース競合が発生しないようにマルチスレッドプログラミングを実装する必要がありますのでご留意ください。

(※1)スレッドとは
OSがひとつのプロセスを並列処理するために、プロセスをさらに分割した処理単位のことです。

Apacheのチューニングパラメータ

Apahceにおいては、同時に並列処理をすることができるプロセス数あるいはスレッド数の上限が重要なパラメータとなってきます。http.confにて設定するパラメータになりますので、それぞれ抑えるようにしましょう。

もうひとつ気にすべきはKeepAliveの設定となります。KeepAliveとは、機器間の接続が有効であることを確認するために定期的に行われる通信となります。KeepAliveの応答があるうちは接続を保持することで、接続を確立するために必要なリソースを消費せずに済むという利点があります。

KeepAliveの設定として下記のようなパラメータがありますので、こちらも適切な値にチューニングすることを意識して下さい。

参考資料

より詳細を知りたい方は、Apache Foundationのマニュアルに目を通すことをお勧めします。
https://httpd.apache.org/docs/

おわりに

最後まで読んでいただき、ありがとうございました。ほかにも性能関連のコンテンツを配信していますので、ぜひ目を通してもらえると嬉しいです。
https://eeengineer.com/linux%e3%82%b5%e3%83%bc%e3%83%90%e3%81%ae%e3%83%9c%e3%83%88%e3%83%ab%e3%83%8d%e3%83%83%e3%82%af%e8%aa%bf%e6%9f%bb%e6%96%b9%e6%b3%95/

コメント