varnishstatの主要フィールドのメモ

varnish-logo

HTTPアクセラレータの Varnish は varnishstat コマンドから varnishd の統計情報を取得できる。
キャッシュヒット率からマイナーなものまで収集出来る情報はたくさんあるけれども、その中でも重要そうな情報をメモ。

varnishstat の使い方

man page

varnishstat コマンドの man(varnishstat – Varnish Cache statistics)

$ man 1 varnishstat

1秒間隔で top のように表示

$ varnishstat

更新間隔を5秒間隔に変更

-w で秒数を指定する。

$ varnishstat -w 5

更新せずに1回だけ表示

top コマンドのバッチモード(-b)に相当。出力結果を使いまわしたいときに利用。

$ varnishstat -1

4列表示され、左から順に

  1. Symbolic entry name
  2. Value
  3. Per-second average over process lifetime, or a period if the value can not be averaged
  4. Descriptive text

出力フィールドを指定

-f で指定する。

$ varnishstat -1 -f n_lru_*,cache_hit,cache_miss
cache_hit 6342 0.26 Cache hits
cache_miss 11592 0.48 Cache misses
n_lru_nuked 11441 . N LRU nuked objects
n_lru_moved 5542 . N LRU moved objects

ワイルドカードの挙動は少し謎。

XML 形式で出力

<?xml version="1.0"?>
<varnishstat timestamp="2013-10-20T10:40:19">
        <stat>
                <name>n_lru_nuked</name>
                <value>12783</value>
                <flag>i</flag>
                <description>N LRU nuked objects</description>
        </stat>
        <stat>
                <name>n_lru_moved</name>
                <value>6239</value>
                <flag>i</flag>
                <description>N LRU moved objects</description>
        </stat>
</varnishstat>

JSON 形式で出力

$ varnishstat -j -f n_lru_*
{
        "timestamp": "2013-10-20T10:40:38",
        "n_lru_nuked": {"value": 12799, "flag": "i", "description": "N LRU nuked objects"},
        "n_lru_moved": {"value": 6248, "flag": "i", "description": "N LRU moved objects"}
}

統計情報

本題の varnishstat で表示される情報について

varnishstat で表示される情報の一覧は varnish-counters(7) で確認できる。

$ man 7 varnish-counters

client_conn/client_req

client_conn はクライアントからのコネクション数
client_req はリクエスト数

キャッシュヒット率

cache_hit
キャッシュ済みオブジェクトへのリクエスト数

cache_miss
キャッシュされていないオブジェクトへのリクエスト数

cache_hitpass
TTL を設定した人気コンテンツのキャッシュが expire すると、そのタイミングでバックエンドサーバに大量のアクセスが発生してしまう(thundering herd problem)。
この問題を回避するために、Varnish ではバックエンドには1リクエストだけ投げて、残りはキューに貯めてリクエストが集中しないようにしている。
ただ、同じURLでもクライアントによって表示が異なるなどキャッシュできないコンテンツもあるので、そうしたコンテンツにはキャッシュ不要のフラグをたて、バックエンドサーバに毎回リクエストを投げるようにできる。
このコントロールに cache_hitpass を利用する。

sub vcl_fetch {
     if (req.url ~ "blah") {
         return (hit_for_pass);
     }
     return (deliver);
}

cache_hitpasshit_for_pass となったリクエスト数

hit_for_pass の詳細は次の URLを参照

ESI を使っていなければclient_req = cache_hit + cache_miss + cache_hitpass + delta. のようになる。誤差はこの辺りを参照

n_object

キャッシュオブジェクト数

LRU:n_lru_nuked/n_lru_moved

Varnish のキャッシュは least-recently used(LRU) を採用し、キャッシュオブジェクトはリストで管理されている。(コードは bin/varnishd/cache_expire.c)

n_lru_nuked

リストの先頭ほど古いオブジェクトとなるように並んでおり、キャッシュサイズがあふれたときは、キャッシュリストの先頭から削除(nuke)する。この時に n_lru_nuked が増える。
この数が大きければ、キャッシュサイズやキャッシュのルールを見なおしたほうが良い。

n_lru_moved

一度キャッシュされたオブジェクトが再びヒットしたら、キャッシュリストの末尾(=最新)に移動する。この時に n_lru_moved が増える。

ttlつきキャッシュ

ttl を設定したオブジェクトが expire した時は n_expired が増える。
ttl は次のような vcl で設定できる。

sub vcl_fetch {
     if (req.url ~ "\.css") {
        set beresp.ttl = 60s;
     }
     return (deliver);
}

g_bytes/g_space

g_bytes はキャッシュオブジェクト全体のサイズ(Bytes outstanding)
g_space はキャッシュの空き容量(Bytes available)

backend_fail

バックエンドサーバとの通信に失敗した数。
この数が急に増えると、なにか障害が起きている可能性が高い。

References

Advertisements
Tagged with: , ,
Posted in middleware, web

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 6 months ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 6 months ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 6 months ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 1 year ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 1 year ago
%d bloggers like this: