気まぐれSE日記

地方でエンジニアしてます

squidでこんなエラーが大量

OS:TruboLinux 10 Server
squidrpm で入ってる奴


TurboLinuxsquidが走るサーバを何個か用意して、兄弟キャッシュを有効にしたとたん、
squidが重たくなったしまい、しばらく接続不能な状態に陥ってしまった。

原因はなんだろっか?ってことでログを見てみたら、squidのcache.logにこんなのがズラズラ出ていた。


WARNING! Your cache is running out of filedescriptors
...


ようは、接続数が多すぎ?でファイルのデスクリプタが足らんということらしい。

調べてみると、squidが使用できるファイルデスクリプタは、
デフォルト値だと、1024ということで、そりゃすぐ無くなるわなぁってところです。


解決方法

  1. ulimit -HSn xxxxxで増やしてやった状態でrpm作る
  2. squidの起動スクリプトにもulimit -HSn xxxxxxを付け加えてやる。
  3. 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まで行ってたので少しは速くなったようです。