cPanel WHM の 問題でApache の起動スクリプトに ulimit を設定するという記事を投稿したのですが、Html ファイルには正常にアクセスできても、PHP、Perl スクリプトをたたくと 500 Internal Server Error が表示され、Apache のログに(24)Too many open files というエラーログが残ります。
目次
ファイル・ディスクリプタの確認
システム全体で同時に開くことができるファイル数の上限と、ひとつのプロセスが同時に開くことができる上限の閾値を調節します。現在のステータスの確認するには、/proc/sys/fs/file-nr を確認します。
cat /proc/sys/fs/file-nr 20896 0 32768 # /sbin/sysctl -p
左の値 20896 が今開いているファイル数(割当て済みのファイル・ディスクリプタ数)で、右が 65536 がシステムのファイル・ディスクリプタの最大値です。
システムが開けるファイルの上限を変更
まずは、/etc/sysctl.conf を編集してカーネルパラメーターを調節。
vi /etc/sysctl.conf add end of line fs.file-max = 65536 cat /proc/sys/fs/file-max 65536
同時にひらけるファイルとプロセス数の変更
次に/etc/security/limits.conf を編集して、システムとプロセスが開ける上限を変更します。
vi /etc/security/limits.conf * soft nproc 65536 * hard nproc 65536 * soft nofile 65536 * hard nofile 65536
ユーザが開けるプロセスの変更
CentOS 6 からはユーザが開けるプロセスの上限も設定されているため、90-nproc.conf の設定を変更します
ulimit -u 32768 vi /etc/security/limits.d/90-nproc.conf * soft nproc 65536 * hard nproc 65536 * soft nofile 65536 * hard nofile 65536
設定の確認
ulimit -a でopen files とmax user processes の値を確認して設定を確認します。
open files と、max user processes が変更した値になっていたらオッケー。
open files (-n) 65536
max user processes (-u) 65536
# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 62747 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65536 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 65536 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
Apache 再起動
ulimit で設定が反映されていたらApache のstop とstart。restart だと、設定が正常に反映されないことがあるみたいです。
/etc/rc.d/init.d/httpd stop /etc/rc.d/init.d/httpd start