web-dev-qa-db-ja.com

Apacheクラッシュ; 「システムで開いているファイルが多すぎます」

MediaTemple(dv)サーバーでmpm_preforkを使用してApache2を実行しています。最近、サーバー構成に大きな変更はありません。 httpd.confは現在次のように設定されています。

MaxKeepAliveRequests 200
KeepAliveTimeout 15

<IfModule prefork.c>
    StartServers           10
    MinSpareServers        10
    MaxSpareServers        10
    MaxClients            200
    MaxRequestsPerChild   4000
</IfModule>

しかし、Apacheが完全にクラッシュする直前に次のエラーが発生します。

[Thu Jun 04 18:30:24 2009] [warn-phpd] mmap cache can't open /var/www/vhosts/mydomain.com/httpdocs/filename.php - Too many open files in system (pid 19873)

Apacheがクラッシュしたときにこのサーバーを再起動するためにベビーシッターをすることに悩まされています。助けて?

7
Eric Martindale

このような行を追加することをお勧めしますulimit -n 16384ファイルの先頭に/etc/default/Apache2してから再起動します。

こちらもご覧ください リンク

9
Zoredache

「man proc」から:

/ proc/sys/fs/file-maxこのファイルは、すべてのプロセスで開くことができるファイルの数に対するシステム全体の制限を定義します。 (プロセスで使用できるプロセスごとの制限RLIMIT_NOFILEを、プロセスが使用できるファイルの数に設定できるsetrlimit(2)も参照してください。)ファイルハンドルの不足に関する多数のエラーメッセージが表示される場合は、この値を増やす:

          echo 100000 > /proc/sys/fs/file-max

          The  kernel constant NR_OPEN imposes an upper limit on the

file-maxに配置できる値。

          If you  increase  /proc/sys/fs/file-max,  be  sure  to 

/ proc/sys/fs/inode-maxを/ proc/sys/fs/file-maxの新しい値の3〜4倍に増やすと、iノードが不足します。

   **/proc/sys/fs/file-nr**
          This (read-only)  file  gives  the  number  of  files 

現在オープンしています。これには3つの数値が含まれます。割り当てられたファイルハンドルの数。空きファイルハンドルの数。ファイルハンドルの最大数。カーネルはファイルハンドルを動的に割り当てますが、再び解放することはありません。割り当てられたファイルの数が最大に近い場合は、最大数を増やすことを検討する必要があります。空きファイルハンドルの数が多い場合は、ファイルハンドルの使用量がピークに達しているため、最大数を増やす必要はありません。

2番目の数値は、最初の数値が増加する必要があるものであるかどうかを確認するために検討する価値があります。その場合は、/ etc/sysctl.confで次のように設定できます。

fs.file-max=512000

これはsystem制限を設定することに注意してください。ユーザーごとの制限は 'ulimit'で設定されています。

4
pjz

Lsofをチェックして、実際に何が起こっているかを確認します。不当に高い制限を超えるのは、多くの場合、リークやその他のバグが原因です。

2
carlito

MediaTempleは Virtuozzoを使用 仮想化テクノロジーですか? VirtuozzoはOpenVZの上に構築されています。 OpenVZでは、開いているファイルの数に制限があります。多分あなたの封じ込めは限界に達していますか?

このコマンドを実行します(可能な場合)。

猫/ proc/user_beancounters

numfileリソースの値を確認します。

2
miHost

Apacheを起動する前に "ulimit -n 8192"を実行してみてください。おそらく最大オープンファイル制限に達しています。

0
freiheit