memcachedのサイズ別データ数のカウント
これは何
memcachedからredisへ移行したいので、redisのベンチマークを取っていたが、その時にmemcachedに保存されているデータがどれくらいのサイズがどれくらいの量で出現するのか確認した。その話を適当にまとめておく。
chunkサイズとslabについて
参考: http://gihyo.jp/dev/feature/01/memcached/0002
memachedはメモリのフラグメンテーションを防ぐために slab allocator というのを使っているっぽい。単にmalloc と freeを使ってメモリを扱うとばらばらになってしまう。確保したメモリをいろいろなサイズの塊(chunk)にわけて同じサイズの塊をクラスとしてひとまとまりにする。stats itemの出力はどうもこのchunk別に別れている模様。
class別個数カウント
$ echo "stats items" | nc localhost 11211 | grep number
STAT items:1:number 6
STAT items:2:number 4990
STAT items:3:number 1
STAT items:4:number 39
STAT items:5:number 160
STAT items:6:number 3
STAT items:7:number 17
STAT items:8:number 19
STAT items:9:number 46
STAT items:10:number 1
STAT items:11:number 5326
STAT items:12:number 1397
STAT items:13:number 60
以下略
このコマンドは↓でもよい
$ echo "stats slabs" | nc localhost 11211 | grep used_chunk
classのサイズを確認する
上からサイズ順になっている。
$ echo "stats slabs" | nc localhost 11211 | grep chunk_size
STAT 1:chunk_size 96
STAT 2:chunk_size 120
STAT 3:chunk_size 152
STAT 4:chunk_size 192
STAT 5:chunk_size 240
STAT 6:chunk_size 304
STAT 7:chunk_size 384
STAT 8:chunk_size 480
STAT 9:chunk_size 600
STAT 10:chunk_size 752
STAT 11:chunk_size 944
STAT 12:chunk_size 1184
STAT 13:chunk_size 1480
以下略
トータル個数とか一定サイズ以上のものとか
$ echo "stats slabs" | nc localhost 11211 | grep used_chunk | awk 'BEGIN {num = 0};{ sum =+ sum + $3} END {print sum }'
大きいサイズの個数が知りたいななど。例えばclass 19以上のもの(size 5kでの区切りで見たやつ)
$ echo "stats slabs" | nc localhost 11211 | grep used_chunk | egrep "(STAT 19|STAT [2-4][0-9])" | awk 'BEGIN {num = 0};{ sum =+ sum + $3} END {print sum }'
Author And Source
この問題について(memcachedのサイズ別データ数のカウント), 我々は、より多くの情報をここで見つけました https://qiita.com/yamotuki/items/bdc591e73ab2a10cf2a4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .