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

    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