こんにちは滝澤です。たまにはapacheネタということで一つ。
Apache HTTP ServerのパラメータチューニングではMaxClientsなどのMPM(マルチ プロセッシング モジュール)関連のディレクティブの設定値を調整することが多いです。本記事ではMPM関連のディレクティブのデフォルト値やディレクティブ間の関係を表にまとめたので紹介します。
注意事項
- UNIX系OSにおける説明となります。バージョン2.2系および2.4系の両方について説明します。
- 関係式においてバージョン2.4系の場合はMaxClientsをMaxRequestWorkersに置き換えて読んでください。
- ディレクティブ名には公式サイトのリンクを張っています。公式の説明も確認してください。
- デフォルトの欄で括弧付きものはそのディレクティブそのものは設定不可ではあるが、内部的に設定されているデフォルト値を示しています。
- デフォルト値、範囲、関係式の出典は公式サイトの文書およびApache HTTP Serverのソースコードの調査によるものです。
- 本記事ではチューニングそのもには触れません。チューニングの方針や構成や運用によって異なり、書ききれないためです。チューニングについては機会がありましたら取り上げたいと思っています。
Apache HTTP Server: MPMパラメータ チートシート
ディレクティブ(2.2 / 2.4) | prefork | worker, event | |
---|---|---|---|
ServerLimit (2.2 / 2.4) | 概要 | 子プロセス数の設定可能な上限値。 | |
デフォルト | 256 | 16 | |
範囲 | 1 〜 200000 | 1 〜 20000 | |
関係式 | MaxClients ≦ ServerLimit | MaxClients / ThreadsPerChild ≦ ServerLimit | |
備考 | apachectlによるrestart/graceful restartでは設定変更が反映されない点に注意。 | ||
ThreadLimit (2.2 / 2.4) | 概要 | 子プロセス毎のスレッド数(ThreadsPerChild)の設定可能な上限値。 | |
デフォルト | (1) | 64 | |
範囲 | 1 〜 20000 (worker), 1 〜 100000 (event) | ||
関係式 | ThreadsPerChild ≦ ThreadLimit, MaxClients ≦ ServerLimit × ThreadLimit (ThreadLimit = ThreadsPerChildの場合) | ||
備考 | - | MaxClients / ServerLimitの値を目安にするとよい。 apachectlによるrestart/graceful restartでは設定変更が反映されない点に注意。 | |
ThreadsPerChild (2.2 / 2.4) | 概要 | 子プロセス毎に生成されるスレッド数。 ThreadLimitが設定値の上限。 | |
デフォルト | (1) | 25 | |
範囲 | - | 1 〜 ThreadLimit | |
関係式 | - | ThreadsPerChild ≦ ThreadLimit | |
備考 | - | ThreadLimitと同じ値がよい。 ※ThreadLimitにより割り当てられている共有メモリを無駄にしないため。 | |
StartServers (2.2 / 2.4) | 概要 | 起動時に生成する子プロセスの数。 | |
デフォルト | 5 | 3 | |
範囲 | 制限無し | 制限無し | |
関係式 | StartServers ≦ MaxClients | StartServers ≦ MaxClients / ThreadsPerChild | |
備考 | 実質的に関係式を満たすように調整される。 MinSpareServers 〜 MaxSpareServersの間で調整するとよい。 ※起動後の子プロセスはMinSpareServersとMaxSpareServersの仕様に基づき生成・破棄されるため。 | 実質的に関係式を満たすように調整される。 MinSpareThreads / ThreadsPerChild 〜 MaxSpareThreads / ThreadsPerChild の間で調整するとよい。 ※起動後の子プロセスはMinSpareThreadsとMaxSpareThreadsの仕様に基づき生成・破棄されるため。 | |
MinSpareServers (2.2 / 2.4) | 概要 | アイドルな子プロセスの最小個数。 | |
デフォルト | 5 | (3) | |
範囲 | 1 〜 MaxClients | ||
関係式 | |||
備考 | |||
MaxSpareServers (2.2 / 2.4) | 概要 | アイドルな子プロセスの最大個数。 | |
デフォルト | 10 | (10) | |
範囲 | 制限無し | ||
関係式 | MinSpareServers + 1 ≦ MaxSpareServers, MaxSpareServers ≦ MaxClients | ||
備考 | 実質的に関係式を満たすようにMaxSpareServersの値が調整される。 | ||
MinSpareThreads (2.2 / 2.4) | 概要 | アイドルなスレッド数の最小値。 | |
デフォルト | - | 75 ※MinSpareServersのデフォルト値(3) × ThreadsPerChildのデフォルト値(25) | |
範囲 | 1 〜 MaxClients | ||
関係式 | |||
備考 | ThreadsPerChildの整数倍にする。 | ||
MaxSpareThreads (2.2 / 2.4) | 概要 | アイドルなスレッド数の最大値。 | |
デフォルト | - | 250 ※MaxSpareServersのデフォルト値(10) × ThreadsPerChildのデフォルト値(25) | |
範囲 | 制限無し | ||
関係式 | MinSpareThreads + ThreadsPerChild ≦ MaxSpareThreads, MaxSpareThreads ≦ MaxClients | ||
備考 | ThreadsPerChildの整数倍にする。 実質的に関係式を満たすようにMaxSpareThreadsの値は調整される。 | ||
MaxClients (2.2) / MaxRequestWorkers (2.4) | 概要 | 最大同時リクエスト数。 | |
デフォルト | ServerLimit | ServerLimit × ThreadsPerChild | |
範囲 | 1 〜 ServerLimit | ThreadsPerChild 〜 ServerLimit × ThreadsPerChild ただし、ThreadsPerChildの整数倍 | |
関係式 | 1 ≦ MaxClients ≦ ServerLimit | ThreadsPerChild ≦ MaxClients ≦ ServerLimit × ThreadsPerChild | |
備考 | |||
MaxRequestsPerChild (2.2) / MaxConnectionsPerChild (2.4) | 概要 | 子プロセスが稼働中に扱うリクエスト数の上限。 | |
デフォルト | 10000 (MaxRequestsPerChild), 0 (MaxConnectionsPerChild) | 10000 (MaxRequestsPerChild), 0 (MaxConnectionsPerChild) | |
範囲 | 制限無し | 制限無し | |
関係式 | |||
備考 | 0は上限無し。 実質的にINT_MAX(2147483647)が内部的な上限となる。 | 0は上限無し。 実質的にINT_MAX(2147483647)が内部的な上限となる。 |