• ファイルディスクリプタの上限管理

    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