### Apache HTTP Server Version 1.3

# ファイル記述子の限界

たくさんのバーチャルホストを運用する場合、もし、 各バーチャルホストごとに異なるログファイルが指定してあると、 Apache がファイル記述子 (ファイルハンドルとも呼ばれます) を使い切ってしまうことがあります。Apache が使用するファイル 記述子の数は、各エラーログファイルにつき 1 つ、他のログファイルの ディレクティブにつき 1 つ、さらに内部で使用する 10 から 20、 の合計になります。Unix オペレーティングシステムではプロセスごとに 使用可能なファイル記述子の数を制限しています。たいていの場合は 64 で、 普通は大きな値のハードリミットまで増やすことができます。

Apache は必要に応じて上限を拡大しようと試みますが、 以下のような場合にはうまくいかないかもしれません。

1. 利用しているシステムで setrlimit() システムコールが提供されていない。
2. システム上で setrlimit(RLIMIT_NOFILE) が動作しない (たとえば Solaris 2.3 のように)。
3. 要求されるファイル記述子の数が ハードリミットを超えてしまう。
4. システムにファイル記述子に関して別の制限が存在してしまっている。 たとえば、stdio ストリームではファイル記述子を 256 以上使えない (Solaris 2)、など。

問題が発生した時に取り得る対処方法は次のとおり:

- ログファイルの数を減らす。VirtualHost セクションでログファイルを指定せず、 メインのログファイルにのみ記録する。
- もし、前述の 1 または 2 の場合であれば、 Apache を起動する前にファイル記述子を増やします。 たとえば次のようなスクリプトを使います。

  > `#!/bin/sh
  > ulimit -S -n 100
  > exec httpd`

ファイル記述子の問題についての詳細や、 オペレーティングシステムごとの解決方法については「ファイル記述子と Apache」の文書を参照してください。

### Apache HTTP Server Version 1.3