Apache HTTP Server: MPMパラメータ チートシート

こんにちは滝澤です。たまには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)preforkworker, event
ServerLimit
(2.2 / 2.4)
概要子プロセス数の設定可能な上限値。
デフォルト25616
範囲1 〜 2000001 〜 20000
関係式MaxClients ≦ ServerLimitMaxClients / 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)
概要起動時に生成する子プロセスの数。
デフォルト53
範囲制限無し制限無し
関係式StartServers ≦ MaxClientsStartServers ≦ 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)
概要最大同時リクエスト数。
デフォルトServerLimitServerLimit × ThreadsPerChild
範囲1 〜 ServerLimitThreadsPerChild 〜 ServerLimit × ThreadsPerChild
ただし、ThreadsPerChildの整数倍
関係式1 ≦ MaxClients ≦ ServerLimitThreadsPerChild ≦ 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)が内部的な上限となる。

株式会社ハートビーツのインフラエンジニアから、ちょっとした情報をお届けします。