Apache on CentOS で大量のバーチャルホストを設定したら次の様なエラーが出ました。
[Fri Sep 04 23:17:11 2009] [error] (24)Too many open files: could not open transfer log file /var/log/httpd/aaaaaaaaaauo-access_log. [Fri Sep 04 23:18:18 2009] [error] (24)Too many open files: could not open transfer log file /var/log/httpd/aaaaaaaaaauo-access_log.
「開くファイルが多すぎるてこれ以上開けない」という内容っぽいです。どうやらCentOSが同時に開けるファイル数を越えてしまったようです。
# cat /proc/sys/fs/file-nr 1728 0 22560
左から、現在割り当てられているディスクリプタ数、使用中のディスクリプタ数、OSの上限ディスクリプタ数。
# vi /etc/sysctl.conf -----sysctl.conf----- fs.file-max = 45120 ---------------
と設定し、
# sysctl -p
で適用。
再度確認。
# cat /proc/sys/fs/file-nr 1728 0 45120
■ユーザごとのディスクリプタの上限
# ulimit -n 1024
増やす。
最終行に追記。
# vi /etc/security/limits.conf -----limits.conf----- root soft nofile 44769 root hard nofile 44769 ----------------------
再ログインして確認。
# ulimit -n 44769