Apache HTTP サーバ バージョン 2.4

Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4 > モジュール

# Apache MPM 共通ディレクティブ

この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。

説明: | 二つ以上のマルチプロセッシングモジュール (MPM) で実装されているディレクティブのコレクション
ステータス: | MPM

### ディレクティブ

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

## 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` を明示的に設定したときに 限ります。

## EnableExceptionHook ディレクティブ

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

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

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

## GracefulShutdownTimeout ディレクティブ

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

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

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

## 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` というエラーメッセージを受けることになります。

### 参照

- DNS の問題
- Apache が使用するアドレスとポートの設定

## 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 では、 バックログとして指定されている値ちょうどまで使っているわけではなく、 設定されている値に基づいて (通常は設定値よりも大きな値を) 使っていることに注意してください。

## 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.

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

## 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.

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

## MaxMemFree ディレクティブ

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

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

## MaxRequestWorkers ディレクティブ

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

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

## 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 はシングルプロセスで実行されますので、 スペアスレッド数もサーバ全体で勘定します。

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

### 制限事項

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

- `perchild` では、 `MaxSpareThreads` が `ThreadLimit` と等しいかそれ以下である必要があります。
- `mpm_netware` は `MinSpareThreads` よりも大きい必要があります。
- `leader`, `threadpool`, `worker` では、 `MinSpareThreads` と `ThreadsPerChild` で決まる総和と等しいか大きい必要があります。

### 参照

- `MinSpareThreads`
- `StartServers`

## MinSpareThreads ディレクティブ

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

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

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

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

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

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

### 参照

- `MaxSpareThreads`
- `StartServers`

## 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`

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

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

### 注意

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

## ReceiveBufferSize ディレクティブ

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

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

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

## 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 ディスク上に置くとスピードが向上するでしょう。 しかし、ログファイルの設置位置や セキュリティ と同様の注意点があるので、注意してください。

### 参照

- Apache の停止と再起動

## SendBufferSize ディレクティブ

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

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

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

## ServerLimit ディレクティブ

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

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

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

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

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

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

### 注意

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

### 参照

- Apache の停止と再起動

## StartServers ディレクティブ

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

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

デフォルト値は MPM ごとに異なります。 `leader`, `threadpool`, `worker` は `StartServers 3` です。 `prefork` は `5` で、 `mpmt_os2` は `2` です。

## StartThreads ディレクティブ

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

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

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

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

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

## ThreadLimit ディレクティブ

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

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

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

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

### 注意

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

## ThreadsPerChild ディレクティブ

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

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

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

## 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` の設定が取り消される場合があります。