- Apache Performance Tuning: スワップ メモリ
- Apache パフォーマンスのチューニング。 MPM モジュール
- Apache Performance Tuning: MPM ディレクティブ
- Apache Performance Tuning: MPM モジュール
- Apache Performance Tuning: MPM ディレクティブの設定
- How to Enable Piped Logging in Apache
Reading Time: 3 minutes
Apache サーバーのパフォーマンスを理解するための鍵は、圧倒的に Multiprocessing Modules (MPMs) にあります。 これらのモジュールは Apache がどのようにマルチプロセシングに対処するかの基礎を決定します。 マルチプロセシングとは、複数の中央処理装置 (CPU コア) を持つシステムで、同時に複数の処理を実行することを意味します。
そこから選択する多くの MPM があります。 これらのモジュールは:
- MPM Prefork
- MPM Worker
- MPM Event
- Other MPMs
- どのMPMがベストですか?
MPM Prefork
自己制御型 MPM Prefork は、入ってくる要求を待つために先取りして新しい同一のプロセスにフォークまたはコピーすることからその名前がつきました。 マルチプロセッシングにおける非スレッドプロセスベースのアプローチで、 MPM Prefork は単一のマスター親サーバプロセスで Apache を実行します。 この親はサーバプールを構成する追加の子サーバを管理する責任があります。 MPM Prefork を使っている間、各子サーバは一つのリクエストだけを扱います。 このフォーカスにより、サーバ上で処理される他のリクエストから 完全に分離されます。 MPM Prefork は通常、mod_php (DSO) のようなスレッド化されていないライブラリやソフトウェアが必要な場合に、 互換性を確保するために使われます。 最適化の観点からは、MPM Prefork はマルチスレッドのソリューションと比較すると非常に不十分で、スレッドの MPM と同様のトラフィックレベルに到達するために非常に多くのリソースを必要とすることがあります。

MPM Worker
ハイブリッドプリフォーク、マルチスレッド、マルチプロセシング Web サーバーです。 MPM Prefork と同じ方法で、MPM Worker は単一のマスター親プロセスがそのサーバプール内のすべての子プロセスを制御する方法を使用します。 しかし、MPM Prefork とは異なり、これらの子プロセスは、同時に数十のスレッド(リクエスト)を処理できるマルチスレッドプロセスです。 MPM Worker は Apache サーバのマルチスレッドマルチプロセッシングの基礎を築き、 Apache 2.2 で安定しました。 スレッド化された構成により、Apache はメモリ上に十数個の子プロセスを保持しながら、簡単に数百のリクエストに対応することができます。 MPM Worker はウェブサービスのための大容量と低リソースソリューションの両方を作ります。

MPM Event
MPM Worker ソースコードに基づき、MPM Event は MPM Worker と設定ディレクティブを共有しています。 KeepAlive リクエストの処理以外は、MPM Worker とほぼ同じ動作をします。 MPM Event は各子プロセスで専用のリスナースレッドを使用します。 この Listening スレッドは入ってくるリクエストを利用可能な Worker スレッドに振り分ける役割を果たします。 Listening スレッドは、KeepAliveTimeout を待つためにスレッド全体をロックする MPM Worker が遭遇する問題を解決しています。 MPM Event の Listener アプローチは、ワーカスレッドが KeepAliveTimeout の期限切れを待って「立ち往生」しないようにします。 この方法は、可能な限り多くのリクエストを処理する最大量のワーカスレッドを維持します。

Serverlimit Information
Other MPMs
利用できる追加の MPM はいろいろとあります。 これらは通常、Unix ベースのシステム以外のオペレーティングシステムに Apache を統合するための一部です。 これらは、それぞれのシステムタイプで Apache を利用するための要件となる特定の MPM を持っています。 これらの MPM の種類はこの記事の範囲外です。

Which MPM is the Best? MPM を正しく選択するには、トラフィック、サイト コード、サーバー タイプ、PHP ハンドラ、および使用可能なハードウェアなど、多くの可動変数を分析する必要があります。 すべてのサーバーはユニークであり、最適な MPM は完全に主観的な選択となります。
アプリケーションコードがマルチスレッドをサポートしていない場合、純粋に互換性の観点から、必然的に MPM Prefork を選択することになります。 MPM Prefork には mod_php (DSO) のようなソフトウェアモジュールが含まれています。 アプリケーションが高性能な負荷分散APIシステムである場合、KeepAliveなしのMPM Workerは非常に良いパフォーマンスを発揮します。 MPM Event のスケーラビリティと柔軟性は、共有ホスティング構成で複数の小規模から中規模のサイトをホストするための堅実な選択です。
Most simple servers setups operate well under the self-governing default configuration of MPM Event, making it an ideal starting point for optimization tuning. 一度選択すれば、MPMは設定ディレクティブに進み、サーバーのパフォーマンスと最適化に関連する設定を確認することができます。 また、このシリーズの前回の記事、Apacheパフォーマンスチューニングをご覧ください。
シリーズ・ナビゲーション << 前の記事 次の記事 >>
- の記事