1.调优的最高指示精神
提高内存利用率,减少内存浪费
提高命中率(80%,95%?)
调优方法:
f参数:factor增长因子
n参数:chunk初始值
提高命中率(80%,95%?)
调优方法:
f参数:factor增长因子
n参数:chunk初始值
低CPU消耗(瓶颈在于网络IO)
libevent事件机制
slab内存预分配机制
适合使用大量低CPU的机器搭建集群
32位机器最大2GB,64GB无限制
-m分配内存为数据区,memcached本身也需要占用内存,因此不可将物理内存全部分配
使用连接池维持连接
libevent事件机制
slab内存预分配机制
适合使用大量低CPU的机器搭建集群
32位机器最大2GB,64GB无限制
-m分配内存为数据区,memcached本身也需要占用内存,因此不可将物理内存全部分配
使用连接池维持连接
2.内存浪费
slab尾部剩余空间
如classid=40中,两个chunk占用了1009384byte,就有1048576-1009384=39192byte被浪费
解决办法:规划slab=chunk*n整数倍
slab中chunk利用率低:申请的slab只存放了一个Item
解决办法:规划slab=chunk
chunk存储Item浪费
如I tem是100,存到128字节chunk,就有28字节浪费
解决办法:规划chunk=Item
如classid=40中,两个chunk占用了1009384byte,就有1048576-1009384=39192byte被浪费
解决办法:规划slab=chunk*n整数倍
slab中chunk利用率低:申请的slab只存放了一个Item
解决办法:规划slab=chunk
chunk存储Item浪费
如I tem是100,存到128字节chunk,就有28字节浪费
解决办法:规划chunk=Item
3.使用合适的factor,减少浪费
-f参数:默认为1.25,曾经为2
值越小,slab中chunk size差距越小,内存浪费越小
值越小,slab中chunk size差距越小,内存浪费越小
建议:计算一下数据的预期平均长度,调整factor,以获得最恰当的设置
4.根据数据分布调整factor
非均匀分布,即数据长度集中在几个区域内
如保存用户Session
更极端的状态是等长数据
如定长键值,定长数据
多见于访问、在线统计或执行锁
计算Item长度
key键长+suffix+value值长+结构大小(32字节)
如保存用户Session
更极端的状态是等长数据
如定长键值,定长数据
多见于访问、在线统计或执行锁
计算Item长度
key键长+suffix+value值长+结构大小(32字节)