memcached内存结构浅析

作者:杨润炜
日期:2017/3/4 12:39

memcached作为缓存服务器,被广泛使用。而数据到底是如何存储在memcached的呢?下图有一个较全面的说明。
memcached内存分配

接下来我就对memcached的使用经验和从网上学习来的知识进行下总结,也能大概说明上图内容。

mem的内存分配原理

mem的内存分配原理包含三种结构:page, slab, chunk。
page是mem申请内存的最小单位,默认是1M,在启动时根据-I参数来设置,所以mem默认不支持存储超过1M的内容;
每个page会等分若干个chunk,每个chunk存一个key的内容;
相同的chunk组成一个slab。
至此对mem的内存分配原理应该有些了解了。

监控mem

接下来介绍一下如何监控mem。

stats

平时可以利用telnet连接到mem,然后运行stats来获取到一些基本运行状态,比如存储键值量,命中量,get次数及set次数等。具体如下:

  1. pid: memcached服务进程的进程ID
  2. uptime: memcached服务从启动到当前所经过的时间,单位是秒。
  3. time: memcached服务器所在主机当前系统的时间,单位是秒。
  4. version: memcached组件的版本。这里是我当前使用的1.2.6。
  5. pointer_size:服务器所在主机操作系统的指针大小,一般为32或64.
  6. curr_items:表示当前缓存中存放的所有缓存对象的数量。不包括目前已经从缓存中删除的对象。
  7. total_items:表示从memcached服务启动到当前时间,系统存储过的所有对象的数量,包括目前已经从缓存中删除的对象。
  8. bytes:表示系统存储缓存对象所使用的存储空间,单位为字节。
  9. curr_connections:表示当前系统打开的连接数。
  10. total_connections:表示从memcached服务启动到当前时间,系统打开过的连接的总数。
  11. connection_structures:表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
  12. cmd_get:累积获取数据的数量,这里是3,因为我测试过3次,第一次因为没有序列化对象,所以获取数据失败,是null,后边有2次是我用不同对象测试了2次。
  13. cmd_set:累积保存数据的树立数量,这里是2.虽然我存储了3次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。
  14. get_hits:表示获取数据成功的次数。
  15. get_misses:表示获取数据失败的次数。
  16. evictions:为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象。
  17. bytes_read:memcached服务器从网络读取的总的字节数。
  18. bytes_written:memcached服务器发送到网络的总的字节数。
  19. limit_maxbytes:memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M.与我们启动memcached服务设置的大小一致。
  20. threads:被请求的工作线程的总数量

stats slabs

stats slabs可以用来查看slab情况,包括数量和其下chunk的使用情况,还可以查看到mem当前申请的总内存量。

memcache-top

memcache-top是一个mem监控工具,可支持对多个mem运行时的各项指标进行监控,轻量方便。

evictions>0

我们接下来谈谈使用时mem数据被踢除(即evictions>0)的情况。
我们已经知道chunk是存储内容的最小单位,一个slab下的所有chunk大小都是一样的。当我们存储的内容大小各样时,mem必定会分配出许多slab,若考虑到极端情况,每个内容只放在一个slab里,那是十分浪费内存的,因为申请到的内存大部分空着。所以有时候我们会在监控(memcache-top)里看到,mem的USAGE很小,但却出现了evictions>0,通过查看mem的内存申请量可以看到已经到达设定的最大分配内存。解决这种问题,无非是加大设定的内存量,或者是减小存入mem的内容大小类别,提高内存利用率。

参考

memcached 内存分配(slab和chunk)
通过stats命令分析Memcached的内部状态

感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/81.html
邮箱:glowrypauky@gmail.com
QQ: 892413924