我的关于memcached一些研究

首先启动一个memcached实例。

memcached -p 11211 -m 15m -vvv -u robinzhu -f 2

用stats查看下缓存状态:

STAT pid 24675
STAT uptime 26
STAT time 1369547076
STAT version 1.4.7
STAT libevent 2.0.12-stable
STAT pointer_size 32
STAT rusage_user 0.000000
STAT rusage_system 0.004000
STAT curr_connections 10
STAT total_connections 11
STAT connection_structures 11
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 15728640
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
STAT reclaimed 0
END

现在缓存为空。

以非压缩的方式向缓存中写入30个100k的相对大数据对象。总共3m数据。

查看stats

stats
STAT pid 24675
STAT uptime 3202
STAT time 1369550252
STAT version 1.4.7
STAT libevent 2.0.12-stable
STAT pointer_size 32
STAT rusage_user 0.064004
STAT rusage_system 0.092005
STAT curr_connections 10
STAT total_connections 12
STAT connection_structures 12
STAT cmd_get 1
STAT cmd_set 30
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 1
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 3075555
STAT bytes_written 1060
STAT limit_maxbytes 15728640
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 3076580
STAT curr_items 30
STAT total_items 30
STAT evictions 0
STAT reclaimed 0
END
查看slab的状态:

stats slabs
STAT 12:chunk_size 163840
STAT 12:chunks_per_page 6
STAT 12:total_pages 5
STAT 12:total_chunks 30
STAT 12:used_chunks 30
STAT 12:free_chunks 0
STAT 12:free_chunks_end 0
STAT 12:mem_requested 3076580
STAT 12:get_hits 0
STAT 12:cmd_set 30
STAT 12:delete_hits 0
STAT 12:incr_hits 0
STAT 12:decr_hits 0
STAT 12:cas_hits 0
STAT 12:cas_badval 0
STAT active_slabs 1
STAT total_malloced 4915200
END
可以看到,总共存储进去30个对象

接着向里面存进100个大小为100k的对象。

stats
STAT pid 24675
STAT uptime 4010
STAT time 1369551060
STAT version 1.4.7
STAT libevent 2.0.12-stable
STAT pointer_size 32
STAT rusage_user 0.080005
STAT rusage_system 0.152009
STAT curr_connections 11
STAT total_connections 14
STAT connection_structures 13
STAT cmd_get 2
STAT cmd_set 130
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 2
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 13327396
STAT bytes_written 4356
STAT limit_maxbytes 15728640
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 9845082
STAT curr_items 96
STAT total_items 130
STAT evictions 4
STAT reclaimed 0
END
可以看到只存进去96个对象。

查看slab的情况:

stats slabs
STAT 12:chunk_size 163840
STAT 12:chunks_per_page 6
STAT 12:total_pages 16
STAT 12:total_chunks 96
STAT 12:used_chunks 96
STAT 12:free_chunks 0
STAT 12:free_chunks_end 0
STAT 12:mem_requested 9845082
STAT 12:get_hits 0
STAT 12:cmd_set 130
STAT 12:delete_hits 0
STAT 12:incr_hits 0
STAT 12:decr_hits 0
STAT 12:cas_hits 0
STAT 12:cas_badval 0
STAT active_slabs 1
STAT total_malloced 15728640
END
所以只有个slab class因为我们存进去的对象都是同样大小的大对象:

这样我已经对该memcached缓存做了内存划分:

现在存入14000个小对象。

stats slabs
STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
STAT 1:total_pages 1
STAT 1:total_chunks 13107
STAT 1:used_chunks 13107
STAT 1:free_chunks 0
STAT 1:free_chunks_end 0
STAT 1:mem_requested 877383
STAT 1:get_hits 0
STAT 1:cmd_set 38214
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 12:chunk_size 163840
STAT 12:chunks_per_page 6
STAT 12:total_pages 16
STAT 12:total_chunks 96
STAT 12:used_chunks 0
STAT 12:free_chunks 96
STAT 12:free_chunks_end 0
STAT 12:mem_requested 0
STAT 12:get_hits 0
STAT 12:cmd_set 38344
STAT 12:delete_hits 0
STAT 12:incr_hits 0
STAT 12:decr_hits 0
STAT 12:cas_hits 0
STAT 12:cas_badval 0
STAT active_slabs 2
STAT total_malloced 16777200
END
原有的内存分配没有改变,内存浪费了。所以这就是memcached的特殊内存分配方式,开始根据存入数据建立的内存slab格局不会在得到调整,所以,就有对内存浪费的隐患。

猜你喜欢

转载自ttxsj.iteye.com/blog/1876285
今日推荐