`

Memcached内存分配优化及使用问题

阅读更多

前几天做了个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的大小

分享到:
评论

相关推荐

    Memcached内存分配与SLAB机制

    ### Memcached内存分配与SLAB机制 #### 第1章 前言 本文将深入探讨Memcached中的内存分配原理及SLAB机制的核心概念。通过详细分析Memcached如何管理内存资源,帮助读者理解其高效内存利用背后的逻辑。 #### 第2章...

    memcached的内存分配代码

    本文将深入探讨memcached的内存分配代码,理解其背后的机制,并讨论如何通过优化内存分配来提升系统的性能。 在Memcached中,内存管理是至关重要的,因为它直接影响到服务的性能和效率。memcached采用了一种特殊的...

    Memcached内存分配与SLAB机制[借鉴].pdf

    本文主要探讨的是Memcached中的核心内存分配机制——SLAB(Simple Large Object)机制。 ### 第 2 章 SLAB 机制 SLAB机制是Memcached为了高效管理内存而设计的一种内存分配策略。传统的内存分配方式在处理小块内存...

    Memcached 内存分析、调优、集群

    ### Memcached内存分析、调优、集群 ...通过对内存分配机制、性能优化技巧以及集群部署策略的理解,可以有效地提升Web应用的整体性能。未来随着技术的发展,Memcached也将不断演进,更好地满足不同场景下的需求。

    Memcached使用--使用

    **Memcached 使用详解** ...了解并熟练掌握其原理、配置、使用及优化,能有效改善系统的响应速度和整体性能。在实际项目中,应根据业务特点灵活运用,并结合其他技术手段,以达到最佳的系统设计。

    MemCached Cache Java Client封装优化历程.docx

    5. **特殊的内存分配机制**:Memcached 最大的存储对象限制为 1MB。其内存分配策略类似于“酒窖”模型,预先分配大块内存用于存储,然后根据对象大小动态划分,以提高内存使用效率。 6. **简单的缓存机制**:...

    Memcached内存分析、调优、集群

    【Memcached内存分析】 Memcached是一款高性能的分布式内存缓存系统,主要用于缓解数据库负载,提升应用性能。其设计目标是简单、快速,并且基于libevent时间处理机制,支持多种操作系统和编程语言。内存管理是...

    Memcached内存分析、调优、集群.ppt

    4. `-L`参数:启用大内存页,这可以优化内存分配,减少碎片,提高性能。 5. `-M`参数:当内存不足时,如果启用此选项,Memcached将停止接收新的写请求,而不是使用LRU策略。 6. `-c`参数:设置最大并发连接数,...

    Memcached内存分析、调优、集群.pdf

    ### Memcached内存分析、调优、集群 #### 一、Memcached背景介绍 Memcached是一款高性能的分布式内存对象缓存系统,它通过减轻数据库负担来加速动态Web应用程序的速度。最初由LiveJournal的开发者Brad Fitzpatrick...

    memcached安装及使用

    ### Memcached安装与使用详解及优化策略 #### 一、Memcached简介 Memcached是一款高性能、分布式内存对象缓存系统,用于加速动态Web应用程序,通过减轻数据库负担来提高网站访问速度,提供数据缓存功能。它通过在...

    安装Memcached及Memcached配置

    - 在实际应用中,你可以根据需求调整Memcached的配置,例如调整内存分配、设置过期时间、优化缓存策略等,以最大化性能和资源利用率。 - 与其他系统集成,例如PHP、Python、Java等,可以使用相应的客户端库进行...

    Memcached 原理和使用详解

    4. **自主内存管理**:Memcached内部管理内存,自动处理内存分配和回收,无需外部干预。 5. **分布式存储**:数据分布在多个服务器上,通过键值对的方式实现数据的定位和分发,每个实例独立管理自己的数据。 **安装...

    基于内存的K-V数据平台(Memcached)

    通过阅读源码,可以深入了解其内部机制,如哈希表的实现、内存分配策略、网络通信细节等。 总结来说,Memcached是一个高效的K-V数据平台,广泛应用于各种需要高速缓存的场景。尽管它没有提供持久化和复杂的数据结构...

    java使用Memcached简单教程

    虽然Memcached易于使用且高效,但在高并发场景下可能会遇到一些问题,如超时(timeout)现象。这可能是由于网络延迟或服务器资源限制等原因造成的。为了提高系统的健壮性和可用性,可以考虑以下几点: 1. **优化...

    PHP内存缓存技术memcached 的安装和工作原理介绍

    - `-m 128` 设置分配给memcached的内存大小,这里是128MB。 - `-l 192.168.1.1` 指定监听的IP地址。 - `-p 11211` 设置监听的TCP端口,默认为11211。 - `-u httpd` 指定运行memcached的用户,通常为Web服务器用户。 ...

    网上收集最新的Memcached学习资料

    调优主要包括:内存分配优化,根据业务需求合理设置内存大小;调整 slab 分配策略,避免内存浪费;监控和调整超时时间,确保高并发下系统的响应速度。 七、Memcached与Linux的关系 在Linux环境下,Memcached可以...

    memcached源代码分析

    《memcached源代码分析1.ppt》通常会提供更直观的视觉呈现,包括流程图、内存分配示意图、性能优化策略等。PPT可能涵盖了以下内容: 1. **系统架构**:展示memcached的服务器-客户端通信模型,以及网络协议实现(如...

    danga memcached使用

    4. **缓存淘汰策略**:当内存空间不足时,memcached会根据LRU(Least Recently Used)最近最少使用原则自动淘汰旧数据。 **二、danga memcached的特性** 1. **轻量级**:memcached占用资源少,启动快速,易于部署和...

    memcached1.4.31

    - **预分配内存**:为了避免频繁的内存分配和释放,Memcached 会在启动时根据配置预先分配内存,提高系统性能。 - **并发处理**:Memcached 支持多线程模型,可以同时处理多个客户端的请求,提升了服务的并发性。 ...

    memcached全面剖析.pdf

    通过案例研究,我们可以了解到如何在服务器配置、数量、memcached进程管理、客户端使用方法等方面进行优化。此外,memcached的兼容性也让它能够适用于多种不同的应用程序,比如Tokyo Tyrant。 总结而言,memcached...

Global site tag (gtag.js) - Google Analytics