mpm_common - Apache HTTP サーバ バージョン 2.4

Apache Server 2.4

<-

Apache MPM 共通ディレクティブ

この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。
説明:二つ以上のマルチプロセッシングモジュール (MPM) で実装されているディレクティブのコレクション
ステータス:MPM
top

CoreDumpDirectory ディレクティブ

説明:Apache がコアダンプする前に移動を試みるディレクトリ
構文:CoreDumpDirectory directory
デフォルト:デフォルトの設定は説明文を読んでください
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_winnt, perchild, prefork, threadpool, worker

Apache がコアダンプする前に移動を試みるディレクトリを制御します。 デフォルト値は ServerRoot ディレクトリですが、このディレクトリはサーバの実行されているユーザ権限で 書き込み可能であるべきではないので、通常はコアダンプは書き込まれません。 デバッグのためにコアダンプが必要であれば、 このディレクティブを使って他の位置にコアダンプを書き出すようにできます。

Linux でのコアダンプ

Apache が root として起動されて、別のユーザの権限に以降した場合は Linux のカーネルはディレクトリがプロセスの権限で書き込み可能な場合でさえも コアダンプを無効にします。Apache (2.0.46 以降) は Linux 2.4 以降ではコアダンプを行なうように再指定しますが、それは CoreDumpDirectory を明示的に設定したときに 限ります。

top

EnableExceptionHook ディレクティブ

説明:クラッシュの後に例外ハンドラを実行するフックを有効にする
構文:EnableExceptionHook On|Off
デフォルト:EnableExceptionHook Off
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:leader, perchild, prefork, threadpool, worker
互換性:2.0.49 以降

安全上の理由から、--enable-exception-hook configure オプションを有効にした場合にのみ、このディレクティブを利用できます。 外部モジュールをプラグインして、子がクラッシュした後に何か実行できるような フックを有効にします。

このような外部モジュールは、既に二つ存在していて、 mod_whatkilledusmod_backtrace がこのフックを活用します。これらの詳細については Jeff Trawick さんの EnableExceptionHook site を参照してください。

top

GracefulShutdownTimeout ディレクティブ

説明:穏やかな停止をかけた後、終了するまで待つ時間
構文:GracefulShutDownTimeout seconds
デフォルト:GracefulShutDownTimeout 0
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:prefork, worker, event
互換性:2.2 以降

GracefulShutdownTimeout には サーバーが "graceful-stop" シグナルを受け取ってから現在の リクエストの処理を最大で何秒間続けるかを指定します。

この値をゼロに設定すると、処理中として残っているリクエストが 全て完了するまでサーバーは終了しません。

top

Listen ディレクティブ

説明:サーバが listen するIP アドレスとポート番号
構文:Listen [IP-address:]portnumber [protocol]
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_netware, mpm_winnt, mpmt_os2, perchild, prefork, threadpool, worker, event
互換性:Apache 2.0 から必須ディレクティブ。protocol 引数は 2.1.5 で追加。

Listen ディレクティブは Apache が特定の IP アドレスやポート番号だけを listen するように指定します。 デフォルトでは全ての IP インターフェースのリクエストに応答します。 Listen ディレクティブは 現在は必須のディレクティブとなりました。 もし設定ファイルになければ、サーバは起動に失敗します。 これは以前のバージョンの Apache から変更のあった部分です。

Listen ディレクティブでは、特定のポートあるいは アドレスとポートの組み合わせから入ってくるリクエストに対して 応答するように指定します。 もしポート番号だけが指定された場合は、サーバは全インターフェースの 指定されたポート番号に対して listen します。 IP アドレスがポートとともに指定された場合は、 サーバは指定されたポートとインターフェースに対して listen します。

複数のアドレスとポートに対して listen するように、 複数の Listen ディレクティブを使うこともできます。 サーバは列挙されたアドレスとポート全てからのリクエストに対して 応答します。

例えば、サーバが 80 番ポートと 8000 番ポートの両方の コネクションを受け入れる場合は、次のようにします。

Listen 80
Listen 8000

二つの特定のインターフェースとポート番号からのコネクションを 受け入れるようにするには、次のようにします。

Listen 192.170.2.1:80
Listen 192.170.2.5:8000

IPv6 アドレスは角括弧で囲まなければなりません。 例えば次の例のようにです。

Listen [2001:db8::a00:20ff:fea7:ccea]:80

protocol オプション引数は通常の設定では必要ありません。 無指定の場合、443 番ポートには https が、他のポートには http がデフォルト値として使用されます。 protocol 指定は、どのモジュールがリクエストを処理するかを決定し、 AcceptFilter によるプロトコル特有の最適化を行うようにします。

非標準なポートで運用している際にのみ protocol 指定が必要になります。 たとえば https なサイトを 8443 番ポートで運用している場合 :

Listen 192.170.2.1:8443 https

エラー条件

同一 IP アドレスとポートの組に、複数の Listen ディレクティブを指定してしまうと、Address already in use というエラーメッセージを受けることになります。

参照

top

ListenBackLog ディレクティブ

説明:保留状態のコネクションのキューの最大長
構文:ListenBacklog backlog
デフォルト:ListenBacklog 511
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_netware, mpm_winnt, mpmt_os2, perchild, prefork, threadpool, worker

保留状態のコネクションのキューの最大長です。 一般的には調整する必要はありませんし、調整は望ましくありません。 しかし、TCP SYN フラッドアタックの状況下におかれる場合に、 増やした方が望ましいシステムもあります。 listen(2) システムコールのバックログパラメータを ご覧下さい。

この値は OS により、小さな数に抑えられます。 値は OS 毎に異なっています。また多くの OS では、 バックログとして指定されている値ちょうどまで使っているわけではなく、 設定されている値に基づいて (通常は設定値よりも大きな値を) 使っていることに注意してください。

top

ListenCoresBucketsRatio ディレクティブ

説明:Ratio between the number of CPU cores (online) and the number of listeners' buckets
構文:ListenCoresBucketsRatio ratio
デフォルト:ListenCoresBucketsRatio 0 (disabled)
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:event, worker, prefork
互換性:Available in Apache HTTP Server 2.4.17, with a kernel supporting the socket option SO_REUSEPORT and distributing new connections evenly across listening processes' (or threads') sockets using it (eg. Linux 3.9 and later, but not the current implementations of SO_REUSEPORT in *BSDs.

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

top

MaxConnectionsPerChild ディレクティブ

説明:Limit on the number of connections that an individual child server will handle during its life
構文:MaxConnectionsPerChild number
デフォルト:MaxConnectionsPerChild 0
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:event, worker, prefork, mpm_winnt, mpm_netware, mpmt_os2
互換性:Available Apache HTTP Server 2.3.9 and later. The old name MaxRequestsPerChild is still supported.

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

top

MaxMemFree ディレクティブ

説明:free() が呼ばれない限り、 主メモリアロケータが保持し続けられるメモリの最大量
構文:MaxMemFree KBytes
デフォルト:MaxMemFree 0
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_netware, prefork, threadpool, worker, mpm_winnt

MaxMemFree ディレクティブは free() が呼ばれない限り、 主アロケータが保持できる空のメモリの最大値をキロバイト単位で設定します。 設定されていないか、零に設定されているときは、無制限になります。

top

MaxRequestWorkers ディレクティブ

説明:Maximum number of connections that will be processed simultaneously
構文:MaxRequestWorkers number
デフォルト:See usage for details
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:event, worker, prefork

このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。

top

MaxSpareThreads ディレクティブ

説明:アイドルスレッドの最大数
構文:MaxSpareThreads number
デフォルト:詳細は使用法をご覧下さい。
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_netware, mpmt_os2, perchild, threadpool, worker

アイドルなスレッドの最大数です。異なる MPM ではそれぞれ、 このディレクティブは異なる取り扱われ方をされます。

perchild では、 デフォルトは MaxSpareThreads 10 です。 この MPM はアイドルスレッド数を、それぞれの子プロセスごとに監視します。 子プロセスにアイドルスレッドが多すぎる場合は、 サーバはその子プロセスに含まれるスレッドを終了し始めます。

worker, leader, threadpool では、 デフォルトは MaxSpareThreads 250 です。 この MPM はアイドルスレッド数をサーバ全体で監視します。 サーバでアイドルスレッド数が多すぎる場合は、 この数字よりも少ない数になるまで子プロセスを終了します。

mpm_netware では、 デフォルトは MaxSpareThreads 100 です。 この MPM はシングルプロセスで実行されますので、 スペアスレッド数もサーバ全体で勘定します。

beosmpmt_os2mpm_netware と似た挙動をします。 beos でのデフォルト値は MaxSpareThreads 50 です。mpmt_os2 でのデフォルト値は 10 です。

制限事項

MaxSpareThreads の取る値には制限があります。 Apache は次の規則に従って自動的に補正します。

参照

top

MinSpareThreads ディレクティブ

説明:リクエストに応答することのできる アイドルスレッド数の最小数
構文:MinSpareThreads number
デフォルト:詳細は使用方法をご覧下さい。
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_netware, mpmt_os2, perchild, threadpool, worker

リクエストに応答するスレッド数の最小値です。 異なる MPM ではそれぞれ、 このディレクティブは異なる取り扱われ方をします。

perchild では、 デフォルトは MinSpareThreads 5 で、 アイドルスレッド数を子プロセス毎に監視します。 もし子プロセスに十分な数のスレッドがなければ、 サーバはその子プロセスに新しいスレッドを作り始めます。 ですから、NumServers10 に、MinSpareThreads5 にした場合は、最小でも 50 のアイドルスレッドが システム上にあることになります。

worker, leader, threadpool では、 デフォルトは MinSpareThreads 75 で、 アイドルスレッド数をサーバ全体で監視します。 もしサーバに十分な数のアイドルスレッドがなければ、 アイドルスレッド数がこの数 number よりも大きくなるまで 新しい子プロセスが生成されます。

mpm_netware では、 デフォルトは MinSpareThreads 10 で、 シングルプロセス MPM ですので、サーバ全体で管理されます。

beosmpmt_os2 は、 mpm_netwareによく似ています。 beos でのデフォルトは MinSpareThreads 1 です。mpmt_os2 でのデフォルトは 5 です。

参照

top

PidFile ディレクティブ

説明:デーモンのプロセス ID をサーバが記録するためのファイル
構文:PidFile filename
デフォルト:PidFile logs/httpd.pid
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_winnt, mpmt_os2, perchild, prefork, threadpool, worker

PidFile ディレクティブで、 デーモンのプロセス ID をサーバが記録するファイルを設定します。 ファイル名が絶対パスでない場合は、 ServerRoot からの相対的なものとして扱われます。

PidFile /var/run/apache.pid

サーバが ErrorLogTransferLog を閉じて開き直したり、設定ファイルを 再読込したりさせるために、サーバにシグナルを送ることができると 便利なことがあります。 これは SIGHUP (kill -1) シグナルを PidFile に書かれているプロセス ID に送ることでできます。

PidFile には、ログファイルの設置位置や セキュリティ と全く同じ注意点があります。

注意

Apache 2 では、 apachectl スクリプトのみを使用してサーバの (再) 起動や停止を 行なうことを推奨しています。

top

ReceiveBufferSize ディレクティブ

説明:TCP 受信バッファサイズ
構文:ReceiveBufferSize bytes
デフォルト:ReceiveBufferSize 0
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker

サーバは TCP 受信バッファサイズを指定されたバイト数に設定します。

0にした場合、OS のデフォルト値が使用されます。

top

ScoreBoardFile ディレクティブ

説明:子プロセスと連携するためのデータを保存する ファイルの位置
構文:ScoreBoardFile file-path
デフォルト:ScoreBoardFile logs/apache_status
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_winnt, perchild, prefork, threadpool, worker

Apache は親プロセスと子プロセス間の通信にスコアボードを用います。 この通信機能にファイルを必要とするアーキテクチャもあります。 ファイルが指定されていなければ、Apache はまずメモリ上 (匿名共有メモリ) にスコアボードを作ろうとし、それが失敗すると ディスク上にファイル (ファイルベースの共有メモリ) を作ろうとします。 このディレクティブを指定すると、Apache は必ずディスクにファイルを生成します。

ScoreBoardFile /var/run/apache_status

ファイルベースの共有メモリは、サードパーティー製のアプリケーションで スコアボードに直接アクセスする必要がある場合に役に立ちます。

ScoreBoardFile を使う場合、 RAM ディスク上に置くとスピードが向上するでしょう。 しかし、ログファイルの設置位置や セキュリティ と同様の注意点があるので、注意してください。

参照

top

SendBufferSize ディレクティブ

説明:TCP バッファサイズ
構文:SendBufferSize bytes
デフォルト:SendBufferSize 0
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, leader, mpm_netware, mpm_winnt, mpmt_os2, perchild, prefork, threadpool, worker

サーバは TCP 送信バッファサイズを指定されたバイト数に設定します。 高速で高レイテンシな環境で ( 100ms 程度、大陸横断高速通信路など) 古い一般的な OS のデフォルト値を増やすのに非常に便利です。

0にした場合、OS のデフォルト値が使用されます。

top

ServerLimit ディレクティブ

説明:設定可能なサーバプロセス数の上限
構文:ServerLimit number
デフォルト:詳細は使用法を参照
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:leader, perchild, prefork, threadpool, worker

prefork MPM の場合は、このディレクティブは Apache プロセス稼働中における MaxClients に設定可能な上限値を設定することになります (訳注: prefork の場合は同時クライアント数 = サーバプロセス数なので)worker MPM の場合には、このディレクティブは ThreadLimit ディレクティブと組み合わせて、 Apache プロセス稼働中における MaxClients に設定可能な上限値を設定することになります。 このディレクティブを変更して再起動(訳注: apachectl restart)しても無視されますが、 MaxClients は再起動で変更することができます。

このディレクティブを使用する際は特に注意してください。 ServerLimit が必要以上に大きな値に 設定された場合は、余計な未使用共有メモリが割り当てられます。 ServerLimitMaxClients がシステムの扱える範囲を越えた設定値になっていると、 Apache は起動しないか、起動しても不安定になるでしょう。

prefork MPM では、 MaxClients を 256 (デフォルト) よりも大きな値に設定する必要がある時にだけ使用してください。 希望の MaxClients 数とくらべて、必要以上に大きな値を指定することは避けてください。

worker, leader, threadpool MPM では、 MaxClientsThreadsPerChild の設定で 16 サーバプロセス (デフォルト) 以上必要になる場合にのみ使用してください。希望の MaxClients ThreadsPerChild とくらべて、必要となるサーバプロセス数以上に大きな値を 設定することは避けてください。

perchild MPM では、 NumServers を 8 (デフォルト) よろいも大きな値に設定する必要があるときにのみ使用してください。

注意

ServerLimit 20000 という制限付きでコンパイルされています (prefork MPM では 200000) 。 これはスペルミスによって誤って酷い状況になるのを、 回避するための処置です。

参照

top

StartServers ディレクティブ

説明:起動時に生成される子サーバプロセスの数
構文:StartServers number
デフォルト:詳細は使用方法を参照
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:leader, mpmt_os2, prefork, threadpool, worker

StartServers ディレクティブは、 起動時に生成される子サーバプロセスの数を設定します。 プロセス数は負荷に応じて動的に制御されますので、 通常はこの値を調整する理由はあまりないでしょう。

デフォルト値は MPM ごとに異なります。 leader, threadpool, workerStartServers 3 です。 prefork5 で、 mpmt_os22 です。

top

StartThreads ディレクティブ

説明:起動時に生成されるスレッドの数
構文:StartThreads number
デフォルト:詳細は使用方法を参照
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:beos, mpm_netware, perchild

起動時に生成されるスレッドの数です。 スレッド数は負荷に応じて動的に制御されますので、 通常はこの値を調整する理由はあまりないでしょう。

perchild でのデフォルトは StartThreads 5 で、このディレクティブは起動時に プロセス毎のスレッド数を追跡します。

mpm_netware でのデフォルトは StartThreads 50 で、 この場合プロセスは一つしかないので、 起動時にリクエストに応答するスレッドの総数となります。

beos でのデフォルトは StartThreads 10 です。 また、起動時に生成されるスレッドの総数にも反映されます。

top

ThreadLimit ディレクティブ

説明:設定可能な子プロセス毎のスレッド数の上限を 設定します
構文:ThreadLimit number
デフォルト:詳細は使用方法を参照
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:leader, mpm_winnt, perchild, threadpool, worker
互換性:Apache 2.0.41 とそれ以降の mpm_winnt で利用可能

このディレクティブは Apache プロセス稼働中における ThreadsPerChild に設定可能な上限値を設定します。再起動時にこのディレクティブの値を 変更しても無視されますが、 ThreadsPerChild は再起動中に、このディレクティブで指定された上限値まで 変更することができます。

このディレクティブを使用する際は特に注意してください。 ThreadLimitThreadsPerChild よりもずっと大きな値に設定された場合は、 余計な未使用共有メモリが割り当てられてしまいます。 ThreadLimitThreadsPerChild の両方がシステムの扱える範囲を超えている場合は、 Apache は起動しないか、起動したとしても不安定になるでしょう。 このディレクティブの値は今使用している Apache の ThreadsPerChild の予想上限値を 超えた値には設定しないでください。

ThreadLimit のデフォルト値は mpm_winnt のときは 1920 で、 他の場合は 64 です。

注意

ThreadLimit 20000 (mpm_winnt の場合は ThreadLimit 15000 ) という制限付きでコンパイルされています。 これはスペルミスによって誤って酷い状況になるのを、 回避するための処置です。

top

ThreadsPerChild ディレクティブ

説明:子プロセスそれぞれに生成されるスレッド数
構文:ThreadsPerChild number
デフォルト:詳細は使用方法を参照
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:leader, mpm_winnt, threadpool, worker

このディレクティブは、それぞれの子プロセスで生成される スレッド数を設定します。 子プロセスは開始時にこれらのスレッドを生成して、 その後は生成しません。mpm_winnt のような、 子プロセスが一つしかないような MPM を利用しているのであれば、 この値はサーバの負荷全体を十分取り扱える程度に、 大きくなければなりません。worker のような、 子プロセスが複数あるような MPM を利用しているのであれば、 サーバの通常負荷を十分扱える程度に、 スレッド総数が多くなければなりません。

mpm_winntでの ThreadsPerChild のデフォルト値は 64 で、他の場合は 25 です。

top

ThreadStackSize ディレクティブ

説明:クライアントのコネクションを受け持つスレッドが使用する スタックのバイト数
構文:ThreadStackSize size
デフォルト:NetWare では 65536。他の OS では違った値
コンテキスト:サーバ設定ファイル
ステータス:MPM
モジュール:leader, mpm_netware, mpm_winnt, perchild, threadpool, worker
互換性:2.1 以降

クライアントコネクションを受け持ち、コネクション処理に必要なモジュールの 呼び出しを行なっているスレッドの、(自動変数用の) スタックサイズは ThreadStackSize ディレクティブで指定します。 大抵の場合 OS の指定しているスタックサイズのデフォルト値は 適切なものですが、調整が必要になる場合もあります:

  • スレッドスタックサイズのデフォルト値が比較的小さく設定されている プラットホーム (例えば HP-UX) では、自動変数用の領域で大きな容量を 使用するサードパーティ製モジュールのために Apache がクラッシュする 場合もあります。そのモジュールは他のプラットホームでは スタックサイズが大きいために、快調に動作するかもしれません。 このタイプのクラッシュは、ThreadStackSize で OS のデフォルト値より大きな値を指定することで解決します。 サードパーティ製モジュールでこの処置が必要であると記載されている 場合か、Apache の出力するメッセージでスレッドスタックサイズが 小さすぎると指摘されている場合にのみ、この調整をしてください。
  • デフォルトスレッドスタックサイズが、Web サーバ用途に必要な量よりも 明らかに大きすぎる場合、ThreadStackSize を OS のデフォルト値よりも小さな値にすることで、子プロセスあたりの スレッド数をより多く持たせられるようになります。 このタイプの調整は、テスト環境でウェブサーバを完全に テストできる場合に限って行なうべきです。 まれに多数のスタックが要求されるリクエストを受けることがあるかも しれないからです。 Web サーバの設定を変更すると、現在の ThreadStackSize の設定が取り消される場合があります。