mpm_common - Apache HTTP サーバ

Apache HTTP サーバ バージョン 2.2

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

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

翻訳済み言語: de | en | ja | tr

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

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

### ディレクティブ

- コメント

## AcceptMutex ディレクティブ

説明: | 複数の子プロセスがネットワークソケットでリクエストを accept しようとしているときに、Apache がそれらの子プロセスを直列化するために 使う方法
構文: | `AcceptMutex default|method`
デフォルト: | `AcceptMutex default`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `prefork`, `worker`

`AcceptMutex` ディレクティブは、 ネットワークソケットのリクエストを accept しようとしている複数の子プロセスを Apache が直列化するために使う方法を設定します。 Apache 2.0 以前は、このメソッドはコンパイル時にのみ選択できました。 最適な方法は、アーキテクチャやプラットホームに大きく依存します。 詳細に関しては、性能のチューニング ドキュメントをご覧下さい。

このディレクティブが `Default` に設定されていれば、コンパイル時に選択されたデフォルト値が使われます。 他の使用可能なメソッドの一覧は下にあります。 全てのメソッドが全てのプラットホームで使用可能であるわけではない、 ということに注意してください。 使用可能でないメソッドが指定された場合は、 使用可能なメソッドの一覧を含んだメッセージが エラーログに出力されます。

`flock`
  `LockFile` ディレクティブで定義したファイルのロックに、 `flock(2)` システムコールを使います。
`fcntl`
  `LockFile` ディレクティブで定義したファイルのロックに、 `fcntl(2)` システムコールを使います。
`posixsem`
  排他処理の実装に POSIX 互換セマフォを使用します
`pthread`
  POSIX Threads (PThreads) 規格で実装されている POSIX 排他処理を使います。
`sysvsem`
  排他処理の実装に SySV 形式のセマフォを使います。

コンパイル時にシステムのデフォルトに選ばれたものが何かを見たい場合は、 `LogLevel` を `debug` に設定するとよいでしょう。デフォルトの `AcceptMutex` が `ErrorLog` に書き込まれます。

### 警告

ほとんどのシステムにおいては、`pthread` オプションが 選ばれていると、子プロセスが `AcceptCntl` mutex を 保持しているときに異常終了した場合、サーバはリクエストへの応答を 停止してしまいます。これが発生した場合は、サーバを復旧させるためには 手動で再起動させる必要があります。

Solaris は例外で、Apache も使用している、子プロセスが mutex を 保持して異常終了した後に mutex を復旧させるための機構を提供をしています。

御使用のシステムが `pthread_mutexattr_setrobust_np()` 関数を 実装している場合は、`pthread` オプションを安全に使用できる 可能性があります。

## ChrootDir ディレクティブ

説明: | Directory for apache to run chroot(8) after startup.
構文: | `ChrootDir /path/to/directory`
デフォルト: | `none`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `event`, `prefork`, `worker`
互換性: | Available in Apache 2.2.10 and later

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

## CoreDumpDirectory ディレクティブ

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

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

### Linux でのコアダンプ

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

## EnableExceptionHook ディレクティブ

説明: | クラッシュの後に例外ハンドラを実行するフックを有効にする
構文: | `EnableExceptionHook On|Off`
デフォルト: | `EnableExceptionHook Off`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `prefork`, `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" シグナルを受け取ってから現在の リクエストの処理を最大で何秒間続けるかを指定します。

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

## Group ディレクティブ

説明: | リクエストに応答する際に所属するグループ
構文: | `Group unix-group`
デフォルト: | `Group #-1`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `beos`, `mpmt_os2`, `prefork`, `worker`
互換性: | Apache 2.0 以降で、グローバル設定でのみ有効です。

`Group` ディレクティブで、 リクエストに応答する際に所属しておくグループを設定します。 このディレクティブを使用するためには、 サーバは最初に `root` 権限で起動されている必要があります。 非 root ユーザでサーバを起動した場合は、指定したグループに変化できずに、 結果的に起動したユーザの属するグループで実行されることになります。 unix-group は次のうちのいずれかです:

グループ名
  グループを名前で参照します
`#` に続いてグループ番号
  グループを番号で参照します。

### 例

`Group www-group`

サーバを実行するために特定の新しいグループを設定することを お薦めします。`nobody` を使用する管理者もいますが、 可能であったり望ましい訳では必ずしもありません。

### セキュリティ

正確にどんなことをやっているのか、その危険性を知らないで、 `Group` (や `User`) を `root` に 設定しないでください。

特記事項: このディレクティブを `<VirtualHost>` で使用することはサポートされなくなりました。Apache 2.0 で `suexec` を設定したい場合は、 `SuexecUserGroup` を使用してください。

### 注意

`Group` ディレクティブは `beos` と `mpmt_os2` MPM にも存在しますが、実質的に無効で、互換性のためだけに存在します。

## Listen ディレクティブ

説明: | サーバが listen するIP アドレスとポート番号
構文: | `Listen [IP-address:]portnumber [protocol]`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `beos`, `mpm_netware`, `mpm_winnt`, `mpmt_os2`, `prefork`, `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`, `mpm_netware`, `mpm_winnt`, `mpmt_os2`, `prefork`, `worker`

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

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

## LockFile ディレクティブ

説明: | 受付を直列化するためのロックファイルの位置
構文: | `LockFile filename`
デフォルト: | `LockFile logs/accept.lock`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `prefork`, `worker`

`AcceptMutex` が `fcntl` や `flock` に設定されて使用されている場合に、使用されるロックファイルへのパスを `LockFile` ディレクティブで設定します。 このディレクティブは通常はそのままにしておきます。 主に `logs` ディレクトリが NFS でマウントされている場合などに値を変えます。 なぜならロックファイルはローカルディスクに 保存されなければならないからです。 メインサーバプロセスの PID がファイル名に自動的に付加されます。

### セキュリティ

`/var/tmp` といった、誰でも書き込めるディレクトリにファイルを 置かない方がよいです。なぜなら、サーバが起動時に作成する ロックファイルの作成自体を妨害することによって、 誰でもサービス拒否アタックを引き起こすことができるからです。

### 参照

- `AcceptMutex`

## MaxClients ディレクティブ

説明: | リクエストに応答するために作成される 子プロセスの最大個数
構文: | `MaxClients number`
デフォルト: | `詳細は使用法をご覧下さい。`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `beos`, `prefork`, `worker`

`MaxClients` ディレクティブは、 応答することのできる同時リクエスト数を設定します。 `MaxClients` 制限数を越えるコネクションは通常、 `ListenBacklog` ディレクティブで設定した数までキューに入ります。 他のリクエストの最後まで達して子プロセスが空くと、 次のコネクションに応答します。

スレッドを用いないサーバ (すなわち `prefork`) では、`MaxClients` は、リクエストに応答するために起動される 子プロセスの最大数となります。 デフォルト値は `256` で、これを増加させたい場合は、 `ServerLimit` の値も増加させる必要があります。

スレッドを用いるサーバや、ハイブリッドサーバ (すなわち `beos` `worker`) では、`MaxClients` は、クライアントに応答できるスレッドの総数を制限します。 `beos` でのデフォルト値は `50` です。 ハイブリッド MPM でのデフォルト値は `16` `ServerLimit` の `25` 倍 (`ThreadsPerChild`) です。 `MaxClients` を 16 プロセス以上必要な値まで増加させたい場合は、 `ServerLimit` も増加させる必要があります。

## MaxMemFree ディレクティブ

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

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

## MaxRequestsPerChild ディレクティブ

説明: | 個々の子サーバが稼働中に扱うリクエスト数の上限
構文: | `MaxRequestsPerChild number`
デフォルト: | `MaxRequestsPerChild 10000`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `mpm_netware`, `mpm_winnt`, `mpmt_os2`, `prefork`, `worker`

`MaxRequestsPerChild` ディレクティブは、 個々の子サーバプロセスが扱うことのできるリクエストの制限数を 設定します。`MaxRequestsPerChild` 個のリクエストの後に、子プロセスは終了します。 `MaxRequestsPerChild` が `0` に設定されている場合は、プロセスは期限切れにより終了することはありません。

### その他のデフォルト値

`mpm_netware` と `mpm_winnt` でのデフォルト値は `0` です。

`MaxRequestsPerChild` を非ゼロに制限することには、二つの利点があります:

- (偶発的な) メモリーリークが起こった場合に プロセスが消費するメモリの総量を制限できる
- プロセスに有限のライフタイムを設定することで、 サーバ負荷が下がった時にプロセス数を少なくすることができる

### 注

`KeepAlive` リクエストの場合は、 一つ目のリクエストだけがこの制限に該当します。 実効的には、一つの子プロセスあたりのコネクション数を 制限するように挙動が変化します。

## MaxSpareThreads ディレクティブ

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

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

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

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

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

### 制限事項

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

- `mpm_netware` は `MinSpareThreads` よりも大きい必要があります。
- `worker` では、 `MinSpareThreads` と `ThreadsPerChild` で決まる総和と等しいか大きい必要があります。

### 参照

- `MinSpareThreads`
- `StartServers`

## MinSpareThreads ディレクティブ

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

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

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

`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`, `mpm_winnt`, `mpmt_os2`, `prefork`, `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`, `mpm_winnt`, `prefork`, `worker`

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

### 例

`ScoreBoardFile /var/run/apache_status`

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

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

### 参照

- Apache の停止と再起動

## SendBufferSize ディレクティブ

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

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

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

## ServerLimit ディレクティブ

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

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

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

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

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

### 注意

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

### 参照

- Apache の停止と再起動

## StartServers ディレクティブ

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

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

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

## StartThreads ディレクティブ

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

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

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

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

## ThreadLimit ディレクティブ

説明: | 設定可能な子プロセス毎のスレッド数の上限を 設定します
構文: | `ThreadLimit number`
デフォルト: | `詳細は使用方法を参照`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `mpm_winnt`, `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
モジュール: | `mpm_winnt`, `worker`

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

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

## ThreadStackSize ディレクティブ

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

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

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

## User ディレクティブ

説明: | リクエストに応答する際に用いるユーザ ID
構文: | `User unix-userid`
デフォルト: | `User #-1`
コンテキスト: | サーバ設定ファイル
ステータス: | MPM
モジュール: | `prefork`, `worker`
互換性: | Apache 2.0 以降で、グローバル設定でのみ有効です。

`User` ディレクティブは サーバがリクエストに応答する際に用いるユーザ ID を設定します。 このディレクティブを使用するためには、スタンドアロン型の サーバは最初に `root` 権限で起動されている必要があります。 非 root ユーザでサーバを起動した場合は、 権限の低いユーザへと変わることができず、 結局元のユーザのプロセスとして実行され続けます。 `root` で起動した場合に親プロセスが root として実行されているのは正常な動作です。 Unix-userid は次のどれかです。

ユーザ名
  ユーザを名前で参照します。
# に続いてユーザ番号
  ユーザを番号で参照します。

このユーザは、外部に見せるように意図していないファイルに、 アクセス可能になってしまうような権限を持つべきではないですし、 同様に HTTP リクエストに対して応答するように意図していない 実行コードを、実行できるような権限を持つべきではないです。 サーバを実行するために特定の新しいユーザとグループを 設定することをお薦めいたします。 `nobody` ユーザを使用する管理者もいますが、 これが常に望ましいわけではありません。 なぜなら `nobody` ユーザは、システムで 他の役割を担っているかも知れないからです。

### セキュリティ

正確にどんなことをやっているのか、その危険性を知らないで、 `User` (や `Group`) を `root` に 設定しないでください。

特記事項: このディレクティブを `<VirtualHost>` で使用することはサポートされなくなりました。 `suexec` 向けにサーバを設定するのであれば、 `SuexecUserGroup` を使用してください。

### 注意

`User` ディレクティブは `beos` と `mpmt_os2` MPM にも存在しますが、実質的に無効で、互換性のためだけに存在します。

翻訳済み言語: de | en | ja | tr

## コメント

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.