memcached优化方法
来源:互联网 发布:java语言程序设计 pdf 编辑:程序博客网 时间:2024/06/10 08:56
工作原理
基本概念:slab,page,chunk。
slab,是一个逻辑概念。它是在启动memcached实例的时候预处理好的,每个slab对应一个chunk size,也就是说不同slab有不同的chunk size。具体分配多少个slab由参数 -f (增长因子)和 -n (chunk最小尺寸)决定的。
page,可以理解为内存页。大小固定为1m。slab会在存储请求时向系统申请page,并将page按chunk size进行切割。
chunk,是保存用户数据的最小单位。用户数据item(包括key,value)最终会保存到chunk内。chunk规格是固定的,如果用户数据放进来后还有剩余则这剩余部分不能做其他用途。
工作流程:memcahed实例启动,根据 -f 和 -n 进行预分配slab。以 -n 为最小值开始,以 -f 为比值生成等比数列,直到1m为止(每个slab的chunk size都要按8的倍数进行补全,比如:如果按比值算是556的话,会再加4到560成为8的整倍数)。然后每个slab分配一个page。当用户发来存储请求时(key,value),memcached会计算key+value的大小,看看属于哪个slab。确定slab后看里面的是否有空闲chunk放key+value,如果不够就再向系统申请一个page(如果此时已经达到 -m 参数设置的内存使用上限,则看是否设置了 -M 。如果设置了 -M 则返回错误提示,否则按LRU算法删除数据)。申请后将该page按本slab的chunk size 进行切割,然后分配一个来存放用户数据。
注意:
1,chunk是在page里面划分的,而page固定为1m,所以chunk最大不能超过1m。
2,chunk实际占用内存要加48B,因为chunk数据结构本身需要占用48B。
3,如果用户数据大于1m,则memcached会将其切割,放到多个chunk内。
4,已分配出去的page不能回收。
优化建议
1,-n 参数的设置,注意将此参数设置为1024可以整除的数(还要考虑48B的差值),否则余下来的部分就浪费了。
2,不要存储超过1m的数据。因为要拆成多个chunk,计算和时间成本都成倍增加。
3,善用stats命令查看memcached状态。
4,消灭eviction(被删除的数据)。造成eviction是因为内存不够,有三个思路:一是在CPU有余力的情况下开启压缩(PHP扩展);二是增加内存;三是调整 -f 参数,减少内存浪费。
5,调整业务代码,提高命中率。
6,缓存小数据。省带宽,省网络I/O时间,省内存。
7,根据业务特点,为数据尺寸区间小的业务分配专用的memcached实例。这样可以调小 -f 参数,使数据集中存在少数几个slab上,内存浪费较少。
0 0
- memcached优化方法
- memcached优化python网站
- memcached使用与优化
- memcached性能优化(六)
- memcached性能优化(七)
- 网站优化之Memcached
- memcached实战系列(四)memcached stats命令 memcached优化
- Memcached 入门-介绍-使用-优化
- django缓存优化 Memcached 解析
- memcached 常用方法笔记
- freeBSD 安装memcached 方法
- memcached的安装方法
- memcached 常用方法介绍
- memcached压力测试(附memcached安装方法)
- 【搜集】安装 memcached 的方法
- Window 下安装 Memcached方法~
- php 优化一之memcached安装配置
- MemCached Cache Java Client封装优化历程
- 欢迎使用CSDN-markdown编辑器
- CSS 实现表格内容超出用省略号显示
- LeetCode Length of Last Word
- 第3题作业
- java文本区控件
- memcached优化方法
- 关于sql优化的一些小技巧
- mysql left( right ) join使用on 与where 筛选的差异
- 准备蓝桥杯--dyx--数列特征
- 从游戏设计到星际探险,微软HoloLens全息技术将改变什么?
- Python爬虫爬学校民主湖(4)------------模拟登录
- 第一个Cocos2d-JS游戏
- HashMap,LinkedHashMap,TreeMap的区别
- hiho一下第二周:Trie树