memcachedで
期限が来てないのに&まだcache余ってるのにcacheの内容が消えちゃうよ、ぷんすか><
という相談を受けました
厳密にはAWSのElastiCacheですが同じなので:)
全体のメモリは余っているものの、おそらくslab溢れかなとあたりをつけるものの、memcachedはそこまでtuningする余地がないのでどうしたものかと調べていたところ
http://kotakanbe.blogspot.jp/2011/02/memcachedstats-slabsruby.html
memcachedのstats slabsを解析するRubyスクリプト
いい情報を載せている方がいらっしゃいました。
$ ruby better_stats_slabs.rb -h hogehoge.cache.amazonaws.com:11211
とすると、
(unit: Byte)
STAT 2( 120) | never_used: 679320 reusable: 53329440 free_total: 54008760 | item_size : 725337420 ( 50%) wasted: 725337420 ( 50%)
STAT 3( 152) | never_used: 0 reusable: 85077440 free_total: 85077440 | item_size : 280366720 ( 89%) wasted: 32984320 ( 10%)
STAT 4( 192) | never_used: 587520 reusable: 213529152 free_total: 214116672 | item_size : 1311054348 ( 89%) wasted: 152448180 ( 10%)
* STAT 5( 240) | never_used: 0 reusable: 0 free_total: 0 | item_size : 884250648 ( 90%) wasted: 98250072 ( 10%)
STAT 6( 304) | never_used: 457520 reusable: 459531872 free_total: 459989392 | item_size : 1701094800 ( 89%) wasted: 200128800 ( 10%)
STAT 7( 384) | never_used: 0 reusable: 384 free_total: 384 | item_size : 82642216 ( 89%) wasted: 9609560 ( 10%)
STAT 8( 480) | never_used: 0 reusable: 2400 free_total: 2400 | item_size : 9432720 ( 90%) wasted: 1048080 ( 10%)
STAT 9( 600) | never_used: 0 reusable: 1800 free_total: 1800 | item_size : 193391280 ( 90%) wasted: 21487920 ( 10%)
STAT 10( 752) | never_used: 0 reusable: 51136 free_total: 51136 | item_size : 61206392 ( 89%) wasted: 6881192 ( 10%)
STAT 11( 944) | never_used: 0 reusable: 944 free_total: 944 | item_size : 2822992 ( 89%) wasted: 319584 ( 10%)
STAT 12(1184) | never_used: 0 reusable: 1184 free_total: 1184 | item_size : 4707136 ( 89%) wasted: 530880 ( 10%)
STAT 13(1480) | never_used: 0 reusable: 1480 free_total: 1480 | item_size : 7543116 ( 90%) wasted: 838124 ( 10%)
* STAT 14(1856) | never_used: 0 reusable: 0 free_total: 0 | item_size : 940752 ( 89%) wasted: 106032 ( 10%)
* STAT 15(2320) | never_used: 0 reusable: 0 free_total: 0 | item_size : 941688 ( 90%) wasted: 104632 ( 10%)
* STAT 16(2904) | never_used: 0 reusable: 0 free_total: 0 | item_size : 942932 ( 89%) wasted: 105412 ( 10%)
* STAT 17(3632) | never_used: 0 reusable: 0 free_total: 0 | item_size : 941184 ( 89%) wasted: 104832 ( 10%)
* STAT 18(4544) | never_used: 0 reusable: 0 free_total: 0 | item_size : 940240 ( 89%) wasted: 104880 ( 10%)
* STAT 19(5680) | never_used: 0 reusable: 0 free_total: 0 | item_size : 940608 ( 90%) wasted: 104512 ( 10%)
* STAT 20(7104) | never_used: 0 reusable: 0 free_total: 0 | item_size : 939624 ( 89%) wasted: 104664 ( 10%)
* STAT 21(8880) | never_used: 0 reusable: 0 free_total: 0 | item_size : 943056 ( 90%) wasted: 104784 ( 10%)
STAT 22(11104) | never_used: 0 reusable: 11104 free_total: 11104 | item_size : 929256 ( 89%) wasted: 103416 ( 10%)
STAT 23(13880) | never_used: 263720 reusable: 111040 free_total: 374760 | item_size : 599616 ( 90%) wasted: 66624 ( 10%)
STAT 24(17352) | never_used: 902304 reusable: 86760 free_total: 989064 | item_size : 46848 ( 89%) wasted: 5208 ( 10%)
STAT 25(21696) | never_used: 954624 reusable: 21696 free_total: 976320 | item_size : 58572 ( 89%) wasted: 6516 ( 10%)
total malloced : 7339502648 Byte
total free size : 815602840 Byte( 11%)
total used size : 6523899808 Byte( 88%)
items size ≈ 5273014164 Byte( 71%)
wasted size ≈ 1250885644 Byte( 17%)
cache対象のバイトサイズが小さめのslabは割りと余っているんだけど、ある程度大きめのcache対象用のslabは間に合ってないことがわかる。
$ telnet hogehoge.cache.amazonaws.com 11211
とtelnetでつないで
stats cachedump 15 20
と、15番めのstabの内容を20個程度見てみると、最近追加した機能で溢れていたので一旦cacheを切って対応をオヌヌメいたしました