inFablic | Fablic, inc. Developer's Blog.

フリマアプリ フリル (FRIL) を運営する Fablic の公式開発者ブログです。Fablic のデザイナー・エンジニア・ディレクターが情報発信していきます。

telnetでmemcachedを動かしてみる

これは Fablic Advent Calendar 21日目の記事です。

こんにちは。つよぽんです。
fablicでサーバーサイドエンジニアをしています。
すっかり忘年会シーズンですね。皆様飲み過ぎには注意しつつ日々を楽しんでくださいね。

さて、本題ですが皆様memcached使ってますか?
弊社でも随所でmemcachedは使用しています。
ただ、サービスでは使っているけど、実際コマンドでmemcachedの情報を参照している人ってどれくらいいますでしょうか?
実はやってる人って結構少ないと思うんですよね。
てなわけで、今回はtelnetでmemcachedに入って使えるコマンドをいくつか紹介してみようと思います。

f:id:cobasparxxx104:20171221192946p:plain

slabとchunkについて

今回の記事を書く上で、slabとchunkの意味を知っておく事は必須です。
なのでザックリですが説明してみます。

新しいキャッシュを登録する時、予め決められた領域(chunk)にデータが保管されます。
例えば、下のようなサイズのchunkがあるとします。

chunk A(10byte)
chunk B(20byte)

この状態で15byteのデータをキャッシュしようとするとBのchunkに5byteのデータをキャッシュしようとするとAのchunkにデータが入ります。

で、同じサイズのchunkを一纏めにしたものがslabになります。 slab 1のchunkサイズが10byteだった場合、
5byteのデータが入ったchunk Aがslab 1に登録
9byteのデータが入ったchunk Aがslab 1に登録
と言った感じで登録されていきます。

f:id:cobasparxxx104:20171221194431p:plain

telnetでmemcachedに入ってみる

では、slabとchunkの説明が終わったところでmemchachedに接続してみましょう。
memcached-toolのようなツールはあるんですが、基本的にはtelnetで接続します。 入り方は簡単。下記のコマンドを打つだけです。
telnet ホスト名 ポート番号(たいていの場合11211)

実際にやってみます。
下記のようなメッセージが出たら接続成功です。
※host名は隠しています。

$ telnet ******** 11211
Trying 172.17.200.129...
Connected to ***********
Escape character is '^]'.

コマンド紹介

無事memcachedに接続できました。
では、次は実際にいくつかコマンドを紹介したいと思います。

stats

memcachedの状態を表示してくれます。
GETの発行回数を見たり、メモリの仕様状況を見たりするのに便利です。

実際に入力してみるとこんな感じになります。
※項目が大量にあるので一部のみ表示。

stats
STAT pid 1
STAT uptime 7933659
STAT time 1513823144
STAT version 1.4.34
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 884870.892000
STAT rusage_system 613432.096000
STAT curr_connections 940
STAT total_connections 1536501
STAT rejected_connections 0
STAT connection_structures 1612
STAT reserved_fds 20
STAT cmd_get 57302259951
STAT cmd_set 7200962077
STAT cmd_flush 0
STAT cmd_touch 0
STAT cmd_config_get 528905
STAT cmd_config_set 2
STAT get_hits 51172825475
STAT get_misses 6129434476
STAT get_expired 59356830
STAT get_flushed 0

stats items

slabに入っているitems数等のslab毎のitem情報を表示します。

実際に入力してみるとこんな感じになります。
items:1の部分がslabの番号なります。

stats items
STAT items:1:number 35
STAT items:1:number_hot 11
STAT items:1:number_warm 10
STAT items:1:number_cold 14
STAT items:1:age 46146
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 971
STAT items:1:expired_unfetched 147
STAT items:1:evicted_unfetched 0
STAT items:1:evicted_active 0
STAT items:1:crawler_reclaimed 2206
STAT items:1:crawler_items_checked 145577
STAT items:1:lrutail_reflocked 11
STAT items:1:moves_to_cold 5478
STAT items:1:moves_to_warm 3781
STAT items:1:moves_within_lru 20872
STAT items:1:direct_reclaims 0

stats slabs

このコマンドにはslabの持っているchunkのサイズ等が表示されます。

実際に入力してみるとこんな感じになります。 STAT 1の部分の数字がslabの番号です。

stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 35
STAT 1:free_chunks 10887
STAT 1:free_chunks_end 0
STAT 1:mem_requested 3262
STAT 1:get_hits 186240
STAT 1:cmd_set 4209
STAT 1:delete_hits 83
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0

stats cachedump

さて、slabのitemsとslabsでslabの情報は出せました。 ただ、どのslabにどんなキーが入っているんだ?
って調べたい時はこのコマンドを使います。

stats cachedump slab番号 limit

実際に入力してみます。
※key名の部分は修正しています。

stats cachedump 1 1
ITEM hogehoge_1000 [4 b; 1513871274 s]

hogehoge_1000の部分がkey名。 4 bの部分がbyte数。 1513871274 sはキャッシュの有効期限(unix time)になります。

このようにtelnetで繋げてコマンドを入力することで、様々な情報をみる事ができます。 こちらにドキュメントがあるので他のコマンドや各項目の意味を調べてみてください!!

ちなみに終了したい時はquitと入力してください!!

最後に

さて、今回の記事はこれで終了です。
普段、サービスでmemcahedを使っていても、memcachedがどういう使われ方をしているかって意識することって少ないんじゃないかと思います。
たまには自分のサービスのmemcachedの使用状況覗いてみてはいかがでしょうか。色々発見があって面白いですよ!!
では、皆様楽しいmemcachedライフを!!