【初心者向けApache入門】:並列処理の基本とパフォーマンス改善のコツ

1. Apacheとは

Apache(アパッチ)とは、正式にはApache HTTP Serverと呼ばれ、世界中で広く使われている オープンソースのWebサーバーソフトウェア です。最近だとnginxの方が市場シェアが上になっていますけれども、特に国内のミッションクリティカルなシステムでは依然として用いられることが多いソフトウェアですので、インフラエンジニアとしては確実に押さえておきたい内容となります。

参考までにWebサーバーソフトウェアの世界市場シェア(2025年3月時点)の情報を共有します。
Nginx:33.8%
Apache:26.3%
W3Techs – extensive and reliable web technology surveys

2. Apacheの並行処理の仕組み

ApacheにはMPM(Multi Processing Module)というモジュールにより並行処理を実現することができます。MPMにはprefork、worker、eventと呼ばれる処理方式がありますのでそれぞれ説明してます。従来のprefork、workerよりもeventの方が処理性能が高いので、高負荷システムにおいてはeventを採用するのが良いと考えております。下表にそれぞれの方式の概要を記載します。

それぞれの方式の処理イメージを記載します。まずpreforkです。ひとつの子プロセスがひとつのクライアントからのリクエストを処理します。あらかじめ起動しているプロセス数を超えるリクエストが来たら、新しい子プロセスを生成して処理を行います。

workerとeventについてはスレッドでリクエストを処理する方式となります。preforkとは異なり、子プロセスにおける複数スレッドがリクエストを処理します。子プロセスにおけるリスナースレッドで接続を受け付けて、後ろのワーカースレッドで処理を行う流れとなります。リクエストが増えると子プロセスが生成される挙動はpreforkと同様です。

workerとeventの違いはKeepAlive発生時の挙動となります。まずworkerにおける挙動を下図に示します。KeepAlive中はワーカスレッドが待ち状態になってしまうため処理効率が落ちてしまいます。


続いてeventにおけるKeepAlive時の挙動を記載します。workerと異なり、ワーカースレッドの処理が終わったらコネクションを解放して次のリクエスト受付することができるので、より効率的にスレッドを使うことができます。

より詳細を知りたい方は、Apache Foundationの公式マニュアルを参照いただければと思います。
https://httpd.apache.org/docs/

※KeepAliveとは
機器間の接続が有効であることを確認するために定期的に行われる通信となります。KeepAliveの応答があるうちは接続を保持することで、接続を確立するために必要なリソースを消費せずに済むという利点がある一方で、接続され続けるとプロセスやスレッドが解放されないというデメリットもあります。両者のバランスを取ってKeepAlive関連のパラメータを検討することが重要です。event方式においてはKeepAliveの処理は別スレッドで処理されますが、大量のクライアントが長期間接続されたままだとリソース影響が起きる可能性がありますので、event方式においても考慮して下さい。


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

続いてApahceにおける主なチューニングパラメータを説明していきます。プロセス数や、worker/eventにおいてはスレッド数が同時接続数を制限する重要なパラメータとなってきますので、適切な値を設定するようにしましょう。バージョン2.4における設定を記載します。

各パラメータの設定個所を図にしています。

上記のパラメーターはチューニング必須と考えておりますが、それに加えて個人的にチューニングしたほうがいいと考えているパラメーターをご紹介します。

ListenBacklogによるキューイングのイメージを記載します。

KeepAliveの設定として下記パラメータがあります。KeepAliveのタイムアウトが短すぎても長すぎてもサーバーのリソースを効率的に使えないので、適切な値にチューニングすることが必要となります。

4. おわりに

最後まで読んでいただきありがとうございました。ほかにもTomcat等の性能関連のコンテンツを記載していますので、ぜひ目を通してもらえると嬉しいです。
【Tomcat】並列処理の仕組みと流量制限のためのチューニング方法
【Tomcat】コネクションプールのチューニングによる流量制限の方法をまとめてみた。

コメント