内存浪费
根据memcached的内存原理来提高缓存效率,可以看出memcached内存有所浪费,比如:slab的浪费、chunk的浪费。
Slab浪费
比如缓存的数据已经确定每个item的大小在1950左右,那么可以看出按照memcached初始分配内存的方式,将有很多的slab区域被浪费掉,比如下面的1952 区域 有890202个item,但是其他的slab却只有几个item
Chunk的浪费
每个slab包含了等小的chunk,但是某个slab的chunk可能一直都没有数据。
Chunk存储item的浪费
比如定义了chunk的大小为1000,那么每个item都不确定是多大,有的800,有的600,那么可以看出相应的chunk浪费了200byte,400byte。
内存利用建议
当了知道了浪费的内存后,应该采取相应的措施来进行内存优化并通过优化使浪费的内存降到最低。
解决方法
1)规划slab=chunk 规划chunk = item
2)使用合适的factor,减少浪费,通过初始化 –f 参数来调整,值越小,slab中的chunk size差距越小,内存浪费越小,1.25是memcached是默认值
使用了64的操作系统,能分配2GB以上的内存。32位操作系统中,每个进程最多只能使用2GB内存。可以启动多个分配2GB以下内存的进程,但这样一台服务器上的TCP连接数就会成倍增加,管理上也变得复杂,所以尽量统一使用了64位操作系统。
另外,最好分配内存为3GB,是因为内存分配量超过这个值,就有可能导致内存交换(swap),memcached的内存存储“slab”, memcached启动时指定的内存分配量是memcached用于保存数据的量,没有包括“slab”本身占用的内存、以及为了保存数据而设置的管理空间。因此,memcached进程的实际内存分配量要比指定的容量要大。
如果在memcached中的数据大部分都比较小。这样,进程的大小要比指定的容量大很多。因此,改变内存分配量进行验证,确认了3GB的大小不会引发swap。