`
RepublicW
  • 浏览: 82323 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

memcache优化

阅读更多
前几天做了个Memcached的思考,并测试了一些数据,是关于如何提高Memcached内存使用率的问题。
在启动memcached的时候可以加-f参数和-n参数。-f指定各slab里面chunk大小的变化比例,默认1.25,-n指定slab里面chunk大小从多少开始。
使用memcache_add($memcache_obj, md5(rand()), str_repeat(md5(rand()),10), false,80000 );向memcache中持续灌入数据。


Memcached –d start –m 50 启动memcache,增长系数默认为1.25
结果:
2011-03-28 11:15:37:SAR:localh~211: 10 0 0 0 0/0% 0 5 265 50M 0% 0 0 0 4/0/0
2011-03-28 11:15:40:SAR:localh~211: 11 0 0 530 0/0% 0 192K 4K 50M 1% 797 530 0 4/0/0
2011-03-28 11:15:43:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 105K 50M 17% 21K 13K 0 4/0/1
2011-03-28 11:15:46:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 104K 50M 48% 61K 13K 0 4/1/1
2011-03-28 11:15:49:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 102K 50M 77% 98K 13K 580 4/1/2
2011-03-28 11:15:52:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 103K 50M 92% 116K 13K 13K 4/1/3
2011-03-28 11:15:55:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 105K 50M 92% 116K 13K 13K 4/2/4
2011-03-28 11:15:58:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 107K 50M 92% 116K 13K 13K 4/2/5
2011-03-28 11:16:01:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 101K 50M 92% 116K 13K 13K 4/3/6

使用率稳定在92%,存储116k条
stats slabs
STAT 8:chunk_size 440
STAT 8:chunks_per_page 2383
STAT 8:total_pages 50
STAT 8:total_chunks 119150
STAT 8:used_chunks 119150

使用了大小为440字节的chunk。 使用了id为8的slab

Memcached –d start –m 50 –f 2 增长系数为2
结果:
2011-03-28 11:17:53:SAR:localh~211: 10 0 0 0 0/0% 0 5 267 50M 0% 0 0 0 4/0/0
2011-03-28 11:17:56:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 107K 50M 16% 20K 13K 0 4/0/0
2011-03-28 11:17:59:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 106K 50M 47% 60K 13K 0 4/1/1
2011-03-28 11:18:02:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 106K 50M 63% 80K 13K 13K 4/1/2
2011-03-28 11:18:05:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 105K 50M 63% 80K 13K 13K 4/1/3
2011-03-28 11:18:08:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 108K 50M 63% 80K 13K 13K 4/2/4
2011-03-28 11:18:11:SAR:localh~211: 11 0 0 13K 0/0% 0 5M 106K 50M 63% 80K 13K 13K 4/2/5

使用率稳定在63%,存储80k条。
STAT 4:chunk_size 640
STAT 4:chunks_per_page 1638
STAT 4:total_pages 50
STAT 4:total_chunks 81900
STAT 4:used_chunks 81900

使用了大小为640的chunk,使用了id为4的slab


Memcached –d start –m 50 –f 1.001 –n 375 增长率为1.001 (memcache要求增长率必须大于1)
结果:
2011-03-28 14:40:09:SAR:127.0.~211: 11 0 0 12K 0/0% 0 4M 100K 50M 98% 124K 12K 10K 4/1/3
2011-03-28 14:40:10:SAR:127.0.~211: 11 0 0 13K 0/0% 0 5M 104K 50M 99% 125K 13K 13K 4/1/3
2011-03-28 14:40:11:SAR:127.0.~211: 11 0 0 13K 0/0% 0 5M 106K 50M 99% 125K 13K 13K 4/2/4

使用率稳定在99%,存储125k条
STAT 1:chunk_size 408
STAT 1:chunks_per_page 2570
STAT 1:total_pages 6
STAT 1:total_chunks 15420
STAT 1:used_chunks 15022

使用了大小为408的chunk,使用了id为1的slab


可见调整-f和-n的值可有效提高memcache对内存的使用率。
不过需要注意的是,以上测试数据使用了同长度数据,对于长度不定长的数据,需要根据整体数据确定-f和-n的值。
经过我的测试slab的id值最大为200,若id为199的slab中chunk仍小于数据长度,那么需要将数据存放在id为200的slab中,该slab中的chunk大小为1m,造成内存的巨大浪费。
memcached -d start -m 50 -f 1.001 -n 100
2011-03-28 14:51:15:SAR:127.0.~211: 11 0 0 13K 0/0% 0 5M 101K 50M 0% 50 13K 13K 4/1/2

内存使用率约等于0,存储50条数据
STAT 200:chunk_size 1048576
STAT 200:chunks_per_page 1
STAT 200:total_pages 50
STAT 200:total_chunks 50
STAT 200:used_chunks 50

使用了大小为1m的chunk,使用了id为200的slab


现在还有一个问题:
STAT 1:chunk_size 408
STAT 1:chunks_per_page 2570
一个1m大小slab中存放了2570个大小为408的chunk,可见并没有放满,剩余的空间就被浪费了。对于这种情况,每个slab浪费的内存只有几百个字节,可以忽略不计,但是假如chunk大小为几十上百k的时候,空间浪费情况就很客观了。这时可在memcached启动时添加-I(大写的i)参数来改变slab的大小
分享到:
评论

相关推荐

    memcache jar

    5. **Memcache优化策略** - 设置合理的缓存过期时间,避免内存被长期未使用的数据占用。 - 使用有效的数据结构(如哈希表)来组织键,提高查找效率。 - 使用适当的缓存替换策略,如LRU(最近最少使用)或LFU(最...

    MemCache Client User Guide

    【MemCache客户端用户指南】 MemCache客户端用户指南主要面向开发者,提供关于如何配置和使用MemCache客户端的详细信息。MemCache是一种高效的...通过理解并应用上述知识,你可以更好地利用MemCache优化你的IT系统。

    【汇总】Memcache

    总结来说,Memcache是Web应用提升性能的重要工具,通过理解和掌握其核心原理和使用方法,我们可以更好地利用它来优化我们的系统,提高用户体验。同时,对于有兴趣的开发者,源码分析和工具使用将进一步加深对...

    Memcache win版 服务器和.net驱动

    总的来说,Memcache在Windows上的实现和.NET驱动的使用是优化Web应用程序性能的重要手段。通过合理利用Memcache的缓存能力,开发者可以构建更加高效、响应迅速的应用,并减轻数据库的工作负担。对于.NET开发者来说,...

    PHP7.x 8.0 memcache dll php_memcache.dll

    4. **性能优化**:memcache的性能受到网络延迟和并发处理能力的影响,合理设置缓存过期时间、选择合适的数据结构以及优化服务器配置都是提升性能的关键。 5. **兼容性问题**:由于`php_memcache.dll`扩展可能不兼容...

    window 7memcache安装组件

    在实际项目中,你可以通过设置Memcache的缓存策略、过期时间以及利用Memcache的分布式特性来优化数据存储和检索。例如,可以将频繁访问的数据存储在Memcache中,减少对数据库的依赖。 总结,安装和配置Windows 7上...

    php 5.4.15 64位 memcache.dll

    标题 "php 5.4.15 64位 memcache.dll" 指的是针对 PHP 5.4.15 版本的一个64位系统优化的 memcache 扩展库。Memcache 是一种广泛使用的分布式内存缓存系统,用于在 Web 应用程序中提高数据读取速度,通过存储经常访问...

    PHP memcache 多版本拓展

    PHP Memcache多版本拓展库特别针对PHP7及以上版本进行了优化,覆盖了VC14至VC16编译器的不同构建,同时支持64位(x64)和32位(x86)操作系统。这使得该扩展库能够在各种Windows环境下运行,满足不同开发者的配置...

    memcache安装php5.2.17的php_memcache.dll

    Memcache是一种广泛使用的分布式内存对象缓存系统,它可以在服务器集群间通过网络共享小块内存,从而提升应用程序的性能,减少数据库负载。...整个过程旨在优化网站性能,减轻数据库压力,提高响应速度。

    memcache监控工具

    - **性能优化**:通过监控Memcache的命中率、内存使用情况和请求延迟,可以发现潜在的性能瓶颈,及时调整配置或优化数据存储策略。 - **故障预防**:监控能够提前发现异常行为,如内存溢出、连接问题等,从而预防...

    MemCache开发说明文档

    4.1 设定预研的具体目标,例如熟悉MemCache的架构、安装过程、客户端开发以及优化策略等。 **第 5 章 技术预研取得的工作成果** 5.1 **MEMCACHED 安装** - **Windows环境下的安装**:详细说明在Windows操作系统上...

    memcache 万能

    "memcache 万能"可能指的是经过优化或修改的版本,使得它能在各种环境下稳定运行,包括但不限于不同的操作系统、服务器配置或特定的应用场景。 **描述:“memcache 万能版的 在任何的环境下都可以使用 改过源码的”...

    Windows_Memcache安装(XAMPP+Memcache+PHP)

    通过这些接口,开发者可以灵活地管理缓存数据,从而优化Web应用的性能。 针对Memcache的安装与配置,以及如何在PHP中调用Memcache,本文提供了两个视频教程的链接,分别介绍了安装配置的全过程和PHP调用方法的具体...

    memcache 5.3.3

    Memcache 5.3.3 是其某个版本,可能包含了性能优化和bug修复。 1. **工作原理** Memcache 采用键值对(Key-Value)存储模式,用户可以将任意字符串(key)与任意类型的数据(value)关联。当应用程序需要数据时,...

    spring memcache 集成使用

    - **配置连接参数**:配置文件中还设置了多个属性,如`servers`用于指定Memcache服务器地址,`initConn`、`minConn`和`maxConn`分别表示初始化连接数、最小连接数和最大连接数,这些参数对于优化连接管理和提高性能...

    memcacheclient-2.0

    《深入解析memcacheclient-2.0:跨平台C++客户端的Bug修复与优化》 在当今的软件开发中,缓存系统起着至关重要的作用,它们能够显著提高应用程序的性能,减少数据库负载。其中,Memcached是一款广泛使用的分布式...

    php5.3的memcache

    本文将详细讲解PHP5.3版本下如何使用和配置Memcache,以及两者结合带来的性能优化。 1. **Memcache介绍** Memcache最初由Danga Interactive开发,主要用于减轻数据库负载,通过在内存中存储常用数据,实现快速访问...

    memcache win7 64位 安装文件

    7. **监控和优化**:运行中的Memcache可以通过命令行工具进行监控,例如`stats`命令显示统计信息,帮助我们了解其工作状态和性能。根据实际需求调整内存分配、超时设置等参数,优化缓存效果。 总之,`memcache`在...

Global site tag (gtag.js) - Google Analytics