memcached调优

思路

  • 提高内存命中率
  • 减少内存浪费
  • 增加内存重复利用率

辅助调优命令

  • Stats命令:查看服务器的运行状态和内部数据
  • Stats settings:查看服务器设置
参数 参数作用
maxbytes 最大字节数限制
maxconns 允许最大连接数
growth_factor 自增长因子
chunk_size key+value+flags大小
reqs_per_event 最大吞吐量
  • Stats items/slabs:数据项统计/区块统计
参数 参数作用
number 该slab中对象数,不包含过期对象
age LRU中最老对象的过期时间
evicted LRU释放对象数
evicted_nonzero 设置了非0时间的LRU释放对象数
evicted_time 最后一次LRU秒数,监控频率
outofmemory 不能存储对象次数
tailrepairs 修复slabs次数
reclaimed 使用过期对象空间存储对象次数

slab核心参数

参数 参数作用
chunk_size chunk大小
chunk_per_page 每个page的chunk数量
total_pages page数量
total_chunk chunk数量*page数量
get_hits get命中率
userd_chunks 已被分配的chunk数量
free_ chunks 剩余的chunk数
mem_requested 使用过期对象空间存储对象次数
active_slabs slab数量
memcached调优_第1张图片
分析.png

内存调优

在这脸简单回顾Memcached的Slab Allocator机制


memcached调优_第2张图片
Slab Allocator.png

说明:

  1. 如图所示,Slab下面划分Page,Page下面划分Chunk
  2. 同一个Slab下面所有Chunk大小一样,不同Slab使用自增长因子递增
  3. 在Slab Class中存放Chunk大小与Slab的对应关系,客户端访问Xmemcached后,先根据存放内容的大小寻找合适的Slab
存在的问题
  1. 存不满Chunk
  2. 热点数据的堆积
  3. Slab不能被Page整除
  4. Page不能被Chunk整除
思路
  1. 调整Chunk大小
  2. 调整自增长因子
场景:MSM

存储的特点:

  1. 数据长度集中在某几个区域内
  2. 分均匀分布

优化思路:

  1. 数据集中在那几个区域内【eg:90 100 110】
  2. 能不能将chunk调成一致
    在eg中,如果调成一致那就是要110,对于存储90的数据就会浪费20byte空间,如果90的数据很多浪费的空间就会比较大
  3. 调整Chunk大小和自增长因子、slab大小
    比如我们有90M空间,划分成3个Slab,每个Slab就是30M,调自增长因子为1.1,那么chunk大小基本是按照90 100 110左右分布
使用限制和建议
  • 限制:
  1. 不提供持久化机制
  2. Memcached只有理论上的永久持久化【30天】
  3. 不提供安全机制,要放在防火墙之后
  4. Memcached的理论最大key长度为250字节
  5. 单个item最大长度为1M
  6. 连接数 并发数200 软连接1024
  7. 不提供冗余机制
  • 建议
  1. 基于文本形式的存储,Memcached目前效率最高
  2. 作为数据库前端
  3. 作为热点数据缓存
  4. 提升web应用速度
  5. 提高扩展性
  6. 缓存一些查询结果
  7. 推荐使用多级缓存

你可能感兴趣的:(memcached调优)