最終更新日: 2014年1月13日
Squid Home / FAQトップ

7. オペレーションに関する問題

7.1 どうすればSquidのシステムレベルの統計情報を取れますか?

配布されたSquidの中には、cachemgr.cgi というCGIユーティリティが含まれており、これで統計を取ることができます。cachemgr.cgiの使い方や情報に関しては、専門のコンサルタントに確認してください。

7.2 キャッシュにある大きなサイズのオブジェクトを探すには?

sort -r -n +4 -5 access.log | awk '{print $5, $7}' | head -25

7.3 Squidを再起動の時にキャッシュをクリーンにしたいのです。

注意) 以下の情報は、Ver2.2の場合です。
最初にSquidを停止します。それには以下のコマンドを使います。
# squid -k shutdown

クリーンなキャッシュで開始させるもっとも早い方法は、設定ファイルの中の cache_dir で定義したディレクトリにある swap.state を書き換える方法です。(swap.stateは削除しないでください)書き換えは、以下のように行います。(以下の"cache1"の場所ははご利用の環境に置き換えてください)

# echo "" > /cache1/swap.state

再起動の際には、cache_dir の所有者で再起動するようにしてください。
時間のかかる別の方法としては、すべてのキャッシュディレクトリを作り直させる方法があります。最初に既存のキャッシュを移動廃棄します。

# cd /cache1
# mkdir JUNK
# mv ?? swap.state* JUNK
# rm -rf JUNK &
次にSquidのコマンドでキャッシュを生成します。
# squid -z

7.4 Real Audioからはどうやってプロキシ/キャッシュを使いますか?

by Rodney van den Oever, and James R Grinter

  • Real Playerのプロキシの設定をSquidのHTTPポートに合わせてください。(例: 8080)
  • メニューからツール(Tools)->環境設定(Preferences)->ネットワーク設定(Transport )タブを選び、「接続を手動で設定する」にチェックを付けた後に、「RTSP設定」ボタンと「PNA設定」ボタンのそれぞれを押すと、「すべてのコンテンツにHTTPの接続を試みる(HTTP Only)」というチェックがあるので、これだけを選び他のチェックを外します。
このオプションは、ファイヤーウォールなどによって、直接TCPでの接続ができないようなとき、データをHTTPに乗せて送るようにします。:(注意)このオプションを使った場合、受け取れないコンテンツがでる事もあります。

7.5 どうすればキャッシュからオブジェクトをパージ(purge:削除)できますか。

Squidでは設定ファイル(squid.conf)のアクセスコントロールで許可しない限り削除できません。 最初に設定ファイルに以下のようなACLを付けなくてはいけません。
acl PURGE method PURGE
acl localhost src 127.0.0.1
http_access allow PURGE localhost
http_access deny PURGE
これは、ローカルのからの削除要求は受け付け、それ以外は拒否するACLです。
オブジェクトを削除するには、clientプログラムを使うことができます。
# squidclient -p 8080 -m PURGE http://www.robata.org/
"-p 8080"はsquidのhttpポートです。 パージに成功すると以下のような"200 OK'"というレスポンスが返ってきます。
HTTP/1.0 200 OK
Date: Wed, 30 Apr 2003 23:27:00 GMT
Server: Squid/2.4.STABLE7
オブジェクトが見つからなかったなら、"404 Not Found "というレスポンスが返ってきます。
HTTP/1.0 404 Not Found
Server: Squid/2.4.STABLE7
Mime-Version: 1.0

7.6 ICMPを使ったネットワーク評価

バージョン1.1.9以後、Squidはキャッシュを転送するのに最適な場所を選択するため ICMP Round-Trip-Time (RTT) 測定を使えるようになっています。 
以前はICP(インターネットキャッシュプロトコル)に最初に応答した親キャッシュへリクエストを転送していました。 現在ではもっとも緊密(RTT-wise)な親サーバを選べます。

■ICMPのサポートとは、

重要なことは、あなたの親となるキャッシュサーバがICMPの機能を有効にしている事です。これによりあなたのキャッシュサーバによってRTT測定がされて、ソース(オリジナルサイト)サーバ方が親キャッシュよりレスポンスが近いとなればそちらへリクエストを転送します。

もしソースサーバへのRTTを測定するキャッシュサーバが欲しければ、Squidを"USE_ICMP"オプションを付けてコンパイルする必要があります。
これはソースファイルにあるsrc/Makefileならびにsrc/Makefile.inの中で、"-DUSE_ICMP=1"の部分のコメントを外しことで簡単に行えます。
ICMPパケットを送受信する pinger という外部プログラムがあります。 これは root 権限で動作します。
Squidをコンパイルしたあとで pinger は別途インストールする必要があります。 Makefile の中に pinger 用のターゲットが入っています。
% make install
% su
# make install-pinger
設定ファイルにはキャッシュのデータベースをチューニングする3つのオプションがあります。 
netdb_low と netdb_high は データベースに保つ最高・最低ラインのサイズを指定します。
netdb_ttl オプションはサイトをpingするミニマムの間隔です。もし netdb_ttl を300(5分間)に設定するとICMPパケットは5分間は同じサイトに送られません。

その他のオプションで、 minimum_direct_hops はキャッシュに近いサーバを探し出すのに使われます。もしソースサーバがこれよりも近いと判断されたなら、直接リクエストはフォワードされます。

■親サーバの使い方

親のキャッシュサーバで、RTT測定を含むICPリクエストに答えるようになっているなら、あなたのキャッシュは、設定ファイルでこれを使えるように指定する必要があります。
query_icmp on
これで,、あなたからICP要求が発信されます。もし、このとき親キャッシュがRTT測定のICMPを戻せば、あなたの access.log には次のような記録がログの8カラム目に記録されることでしょう。

CLOSEST_PARENT_MISS/it.cache.nlanr.net
この場合、it.cache.nlanr.net が最も低いRTTでソースサーバの情報を返したということになります。どの親よりも、自分の方がRTTが小さかった場合には、ログには次のような記録がされるでしょう。
LOSEST_DIRECT/www.sample.com

■データベースの精査

測定結果のデータベースは cachemgr の "Network Probe Database"を使って表示できます。ホスト名は/24のネットワークへ集められます。
測定結果は、測定されたすべての時間にわたって平均されます。
測定はHTTP要求のURLから得られて、特定のホストになされます。
recvおよび sent フィールドは、受信/送信されたICMPパケットの数です。
その後ろに、時間の情報が表示されます。

典型的なデータベースのエントリーは以下のように見えます:
Network          recv/sent     RTT  Hops Hostnames
192.41.10.0        20/  21    82.3   6.0 www.jisedu.org www.dozo.com
    bo.cache.nlanr.net        42.0   7.0
    uc.cache.nlanr.net        48.0  10.0
    pb.cache.nlanr.net        55.0  10.0
    it.cache.nlanr.net       185.0  13.0
これは、www.jisedu.org と www.dozo.comの両方に21回の ping を送信したことを意味します。
平均RTTは82.3ミリセカンドです。
次の4行のラインは、私たちの親キャッシュからの測定値を示します。
bo.cache.nlanr.net に最低のRTTがあるので、www.jisedu.org または www.dozo.comのURLアクセスはの際にはこのキャッシュが選択されるでしょう。

7.7 キャッシュしたくないサーバまたはURLがあります。

Squid2 からはキャッシュしないようにする指定が、no_cacheオプションでできます。 例えば以下は10.0.1.0/24のネットワークのサーバのオブジェクトはキャッシュせずにソースサーバがすべてリクエストに答えます。
acl Local dst 10.0.1.0/24
no_cache deny Local
次の例はURLの中に「.html」を持つものをキャッシュしません。
acl HTML url_regex .html$
no_cache deny HTML
次の例は特定のURLのサーバをキャッシュしません。
acl XYZZY url_regex ^http://www.i.suck.com/foo.html$
no_cache deny XYZZY
次の例は、8:00から18:00の時間帯はキャッシュしません。
acl Jobtime time 08:00-11:00
no_cache deny Jobtime

7.8 キャッシュディレクトリを削除、再生成したいのですが?

キャッシュディレクトリを削除することはそれほど難しいことではありません。 しかしSquidを実行中にキャッシュディレクトリを削除することは困難です。Squidが動作中は常にキャッシュディレクトリが存在している必要があります。削除は次の手順になります。
  1. Squidをシャットダウンします。
    # squid -k shutdown
  2. Squidの使っていたキャッシュディレクトリ(cache_dir で定義した場所)を削除します。
    # rm -rf /usr/local/squid/cache 
  1. キャッシュディレクトリを作成します。
    # squid -z
  2. Squidを再起動します。
Squid Home / FAQトップ

参考: