博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memcached优化方法
阅读量:6374 次
发布时间:2019-06-23

本文共 1189 字,大约阅读时间需要 3 分钟。

工作原理
    基本概念: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上。内存浪费较少。

转载地址:http://arjqa.baihongyu.com/

你可能感兴趣的文章
python关键词对联_深度学习对联系统
查看>>
java jsp不显示数据库数据_jsp页面显示数据库的数据信息表
查看>>
java中project_Java Project引用Java project
查看>>
mac nginx php-fpm,Mac系统下搭建Nginx+php-fpm
查看>>
java策略模式使用场景,Java设计模式—策略模式
查看>>
oracle时钟,oracle RAC环境中系统时钟的调整
查看>>
oracle数据库体系结构ppt,Oracle数据库的体系结构
查看>>
linux 虚拟目录映射,IIS7添加虚拟目录映射另一台服务器的共享文件夹
查看>>
linux杀一个awk查出的进程,Linux shell - 找到进程pid,然后杀掉(jps, grep, awk)
查看>>
linux内核模块获取进程pid,内核模块打印进程线程PID信息
查看>>
linux共享文件夹sumba,linux 的 samba 实现共享文件夹
查看>>
linux查看设备使用状况,linux下查看硬件资源和网络资源的使用情况
查看>>
centos linux终端,CentOS7 Linux系统命令
查看>>
ip核在linux的驱动,基于嵌入式Linux的USBOTG IP核驱动的设计与实现
查看>>
嵌入式linux系统网络通信,基于嵌入式Linux系统中网络通信研究与实现
查看>>
vmware linux 无网络配置文件,vmware虚拟机添加新网卡后,/etc/sysconfig/network-scripts/下无配置文件ifcfg-xxxx...
查看>>
linux yum库地址,Linux 搭建本地yum仓库
查看>>
linux python htmlparser 安装,python pycparser安装程序
查看>>
linux调用接口带参数,系统调用之二:参数传递
查看>>
ubunt Linux nginx,Ubuntu下安装Nginx
查看>>