squidでファイルディスクリプタが足りなくなる

ちょっとウェブでトラブル。いろいろ対処している途中でどうもSquidのキャッシュを全クリアしないといけなくなり、var/cache以下を削除してディレクトリを再作成。Squidを再起動したところ、どうもSquidの反応がよろしくない。

var/logs/cache.logをチェックするとこんなエラーがたくさん。

2013/04/24 13:35:05 kid1| WARNING! Your cache is running out of filedescriptors
2013/04/24 13:36:53 kid1| WARNING! Your cache is running out of filedescriptors
2013/04/24 13:38:42 kid1| WARNING! Your cache is running out of filedescriptors
2013/04/24 13:40:34 kid1| WARNING! Your cache is running out of filedescriptors

どうやらファイルを大量に開く必要ができてしまって、それがリミットに達した模様。
mgr:infoでチェックしたいんですが、それも反応なし。

仕方なくエイヤでファイルディスリプタを拡張。

OSの制限を確認

umilitで確認。

# ulimit -a | grep open
open files                      (-n) 1024

じゃあ、4倍にしましょう。

etc/squid.confを編集

こんな行を追加。多分デフォルトは1024*1

max_filedesc 4096

起動スクリプト中にOS制限を拡張するコマンドを追加する

/etc/init.d/squidsquidを起動する前にこんな行を入れる。

#!/bin/sh

ulimit -HSn 4096 ← これを追加
case "$1" in
start)
    /usr/local/squid/sbin/squid -s
    echo -n 'starting Squid'
    ;;

stop)
    /usr/local/squid/sbin/squid -k shutdown
    ;;

esac

これで解決しました。

*1:オライリー本によると。