squidでこんなエラーが大量
OS:TruboLinux 10 Server
squidはrpm で入ってる奴
TurboLinuxでsquidが走るサーバを何個か用意して、兄弟キャッシュを有効にしたとたん、
squidが重たくなったしまい、しばらく接続不能な状態に陥ってしまった。
原因はなんだろっか?ってことでログを見てみたら、squidのcache.logにこんなのがズラズラ出ていた。
WARNING! Your cache is running out of filedescriptors
...
ようは、接続数が多すぎ?でファイルのデスクリプタが足らんということらしい。
調べてみると、squidが使用できるファイルデスクリプタは、
デフォルト値だと、1024ということで、そりゃすぐ無くなるわなぁってところです。
解決方法
- ulimit -HSn xxxxxで増やしてやった状態でrpm作る
- squidの起動スクリプトにもulimit -HSn xxxxxxを付け加えてやる。
- squidclient -p 8080 cache_object://localhost/info | grep descriptors で確認
試しにやってみたけど、上限が32768までにしかならんです。(OSの制限?)
以上。
追記:
今日、上記の対応をすべての兄弟squidに適用したところ、問題は出なくなった。
兄弟は5サーバもうけてあり、ICP(UDP 3130ポート)を使用して通信するようにした。
↓squid.confこんな感じです
cache_peer proxy1.hogehoge.net sibling 8080 3130 round-robin
cache_peer proxy2.hogehoge.net sibling 8080 3130 round-robin
cache_peer proxy3.hogehoge.net sibling 8080 3130 round-robin
cache_peer proxy4.hogehoge.net sibling 8080 3130 round-robin
cache_peer proxy5.hogehoge.net sibling 8080 3130 round-robin
これは、各兄弟squidのICPポートが3130の場合で、round-robinと付けると
兄弟のうちどれか死んだ場合、替わりになってくれるらしい。
兄弟・子squidが多い場合、ICP通信がネックになるらしいので、もっと効率を上げるには
muliticast ICP通信にしたほうがイイとも本に書いてあったが、めんどくさそうなのでやめた。
感想
初めて、兄弟squidでキャッシュ情報を共有化してみたんだけど、思ったよりキャッシュが効かないことにちょっと失望してる。ま、最近のページは動的なのでキャッシュが効かないページが多いだけかもしれないけどね。
一応どの程度キャッシュが効いてるのかなと、ICPによるキャッシュヒットの統計をcachemgr経由で取ってみたんだけど、一番効率が良かったクライアントでも、ヒット率は40%代になった程度でした。
こんなものなのかなぁ〜。
あと、muninで取っていたグラフに、兄弟squidへのアクセス件数も出るようになった。これはOK。
squidのスループットのグラフも今まで、400Mが限界だったのが、600Mまで行ってたので少しは速くなったようです。