数日前からWWWをうろうろしているとよく固まるのです。ブラウザが固まるのではなくて、ネットワークが固まって流れないようになります。Bフレッツの調子が悪い? と疑ったりもしますが、おうちサーバからいろいろ調べてみる限りは異常は見られません。それで、いつも使っている squid proxy cache を切ってみると、問題なく流れるようになるんですねー。
今まで特に問題なかったのに、なんで急に squid を通すとおかしくなるようになっちゃったのだろう? としばらく謎だったのですが、squidのアクセスログを眺めていると謎が解けました。私の使っているブラウザにはポップアップ広告除去のために Google Toolbar が入っているのですが、これにくっついてるPageRank表示機能を機能させるために、ページを移動するたびに
GET http://216.239.39.104/search? なんたらかんたらのようなリクエストを発行するようなのです。それで、たまたまコケてただけと思うのですが、問題が起こっているときにこのIPアドレスにpingをうってみると反応がないのです(^^;)。もちろん www.google.com と同じでIPアドレスはぐるぐる回っているのですが、これが逆に問題。squidでは『一定数』のリクエストに対して同時に処理しようと試みるのですが、反応がない場合は数秒~十数秒間待ちつづけてしまいます。で、この間に辛抱たまらず他のページをうろうろ移動しようとすると、GoogleToolbarのリクエストだけで『一定数』に達してしまい、他のリクエストを処理できない→固まる、ということになってしまうようです。 ということで、対策。要はsquidを通さなければうまくいくので、proxy自動設定に除外リストを加えてみました。
function FindProxyForURL(url,host)
{
if (!isInNet(myIpAddress(),"10.0.0.0","255.255.255.0")) {
return "DIRECT";
}
if (isPlainHostName(host)
|| dnsDomainIs(host,"toriyu.dd.que.ne.jp")
|| 略
|| url.match(/search\?/)
) {
return "DIRECT";
} else {
return "PROXY 10.0.0.1:3128; DIRECT";
}
}
これで多い日も安心。どうせ動的なページではsquidは役に立たないのだから、 url.match(/\?/) としてしまっても良いかもしれません。