- 浏览: 2663748 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
开启memcached:
memcached -d -m 10 -l 192.168.1.21 -p 11222 -u userA
这行命令会开启memcached服务,memcached在192.168.1.21:112222上面进行监听,
同时设置memcached使用的最大内存为10MB, memcached一开始并不会一下子申请10MB的内存,
而是在需要的时候才会使用malloc申请内存,当申请内存达到10MB时就不会再申请.
为了减少管理内存碎片的麻烦,当你需要通过memcached往缓存里面保存一个数据时, memcached给这个数据提供一个固定大小的内存块(chunk) ,比如数据的长度是100bytes,那么memcached提供一个大小为128b的chunk来存储该数据,chunk块的大小可以为64B,128B,256B...1024KB .使用何种大小的chunk块是由memcache根据数据的长度来决定的.
当你第一次往memcached存储数据时, memcached会去申请1MB的内存
,
把该块内存称为一个slab, 也称为一个page,
如果可以存储这个数据的最佳的chunk大小为128B,那么memcached会把刚申请的slab以128B为单位进行分割成8192块.
当这页slab的所有chunk都被用完时,并且继续有数据需要存储在128B的chunk里面时,如果已经申请的内存小于最大可申请内存10MB
时,memcached继续去申请1M内存,继续以128B为单位进行分割再进行存储;如果已经无法继续申请内存,那么mamcached会先根据LRU
算法把队列里面最久没有被使用到的chunk进行释放后,再将该chunk用于存储.
chunk属于某个slab,slabs由memcached进行分组管理,以同样chunk大小进行分割的slab属于同一组.
对一组slab, memcached使用这样的几个内部变量进行管理:
total_pages
total_chunks
used_chunks
free_chunks
free_chunks_end
假设现在一组slab,它的chunk大小是128KB, total_pages =1, 那么
total_chunks = (1MB/128KB) * 1 = 8,
total_chunks=used_chunks + free_chunks,
free_chunks = 被使用过但是已经释放的chunk个数(注:个人理解)
free_chunks_end = 没有被使用过的chunk个数(注:个人理解)
used_chunks = free_chunks_end + 现在存储着数据的chunk个数
当一个数据在memcached中被删除时, 存储该数据的chunk被释放, 对应slab组的free_chunks++,
当有数据想添加到缓存里面时, memcached优先使用free_chunks里面的chunk, 如果free_chunks=0,再使用free_chunks_end里面的chunk, 如果连free_chunks_end也为0, 那么重新申请一页内存.
通过telnet 192.168.1.21 11222 可以连上memcached, 键入命令 stats slabs
可以看到所有slabs组的统计数据以及统计情况.
memcached安装包scripts/memcached-tool是一个可以查看memcached的slabs统计情况的perl脚本
为了避免使用memcached时出现异常, 使用memcached的项目需要注意:
1. 不能往memcached存储一个大于1MB的数据.
2. 往memcached存储的所有数据,如果数据的大小分布于各种chunk大小区间,从64B到1MB都有,可能会造成内存的极大浪费以及memcached的异常.
举个例子:
memcached
最大可申请内存为2M, 你第一次存储一个10B的数据,那么memcached会申请1MB的内存,以64B进行分割然后存储该数据,
第二次存储一个90B的数据,那么memcached会继续申请1M的内存,以128B进行分割然后存储该数据,
第三次如果你想存储一个150B的数据, 如果可以继续申请内存, memcached会申请1M内存以256B的大小进行分割,
但是由于最大可申请仅仅为2MB,所以会导致该数据无法存储.
参考:
http://y.jmeye.com/?aid=185
http://num7.iteye.com/blog/212830
http://xieyanhua.iteye.com/blog/1511870
发表评论
-
Sofa memcached client
2012-12-13 17:05 1046一、简介 Sofa 源于 Mi ... -
xmemcached 源代码简单记录
2012-12-13 15:14 958XMemcachedClient.set() 1. ... -
python-memcached client 性能分析
2012-11-11 12:41 920前面python-memcached client 性能问题 ... -
python-memcached client 性能问题
2012-11-09 12:02 1551线上发现memcached偶发超过100ms的情况,刚开始以为 ... -
线程安全的纯python-memcached客户端
2012-10-21 15:06 2057前面测试过python-memcached客户端通过threa ... -
集中化管理memcached的想法
2012-10-21 14:14 1032现在线上web服务器都是直接使用memcached,虽然简单但 ... -
安装libmemcached
2012-10-12 23:32 1823libmemcached是一个c编写的高性能,线程安全的mem ... -
python-memcached的线程安全问题
2012-10-12 15:40 4037答案是肯定的,前提你在使用Python 2.4+和python ... -
使用libmemcached提速memcached的操作
2012-10-12 13:32 1136... -
对memcaced的python客户端测试
2012-10-12 11:34 1277在线上发现python-memcached客户端很有问题,我在 ... -
memcached客户端比较
2012-07-21 16:36 0一、简介 Sofa 源于 Mi ... -
memcache mutex设计模式
2012-07-21 14:19 0Mutex主要用于有大量并发访问并存在cache过期的场合,如 ... -
使用memcache实现高并发计数器
2012-07-21 14:08 6644在网站中很多场景都有 ... -
淘宝在Memcached使用记录
2012-07-21 14:04 5451原文:http://blog.csdn.net/cenwenc ... -
memcache的API
2012-07-21 13:55 719php版本的API:http://www.php.net/ma ... -
memcached协议
2012-07-21 13:36 778协议 memcached的客户端通过 ... -
一致性 hash 算法( consistent hashing )
2012-07-21 12:42 880原文:http://num7.iteye.com/blog/7 ... -
memcached的一些总结
2012-07-13 17:38 1289我们之前对排行榜的数据进行缓存,由于排行榜在我们所有sql s ... -
memcached telnet
2012-07-13 16:06 1081memcached没有client工具来查看状态,只提供tel ... -
memcache中的key为什么要用md5处理
2012-06-15 17:55 1371官方的说法是: “A few years ago, we ...
相关推荐
### Memcached内存分配与SLAB机制 #### 第1章 前言 本文将深入探讨Memcached中的内存分配原理及SLAB机制的核心概念。通过详细分析Memcached如何管理内存资源,帮助读者理解其高效内存利用背后的逻辑。 #### 第2章...
本文主要探讨的是Memcached中的核心内存分配机制——SLAB(Simple Large Object)机制。 ### 第 2 章 SLAB 机制 SLAB机制是Memcached为了高效管理内存而设计的一种内存分配策略。传统的内存分配方式在处理小块内存...
总结来说,memcached的内存分配代码基于Slab Allocation,通过固定大小的chunk管理和slab分层,有效地减少了内存碎片,提高了内存利用率。理解这一机制有助于我们优化分布式缓存服务,提升Web应用的性能。然而,随着...
Slab是一种预分配内存的方式,通过预先分配固定大小的内存块(称为slab),然后将这些块分割成更小的chunk,用于存储不同大小的项(item)。当一个item需要存储时,Memcached会选择最合适的slab,即其chunk大小略...
### Memcached内存分析、调优、集群 ...通过对内存分配机制、性能优化技巧以及集群部署策略的理解,可以有效地提升Web应用的整体性能。未来随着技术的发展,Memcached也将不断演进,更好地满足不同场景下的需求。
memcached 提供了一系列配置选项来控制其行为,尤其是内存分配方面: - **`-m`**:设定 memcached 可使用的最大内存。当内存消耗接近此值时,memcached 将开始执行 LRU 策略以释放空间。 - **`-M`**:禁用 LRU 机制...
Memcached作为一款高效的内存缓存系统,通过slab内存管理和一致性哈希实现分布式集群。在使用过程中,需关注内存分配、连接并发、线程配置等方面的调优,以达到最佳性能。同时,根据项目需求选择合适的客户端,确保...
3. Memcached命令:-m参数设置内存数量,-M参数禁止LRU,-n参数设置初始chunk大小,-f参数设置增长因子,-L参数启用大内存页。 4. Memcached统计信息:使用 stats 命令查看Memcached的统计信息。 Memcached内部机制...
- **内置内存存储方式:** Memcached采用了slab分配机制与LRU算法相结合的方式管理内存,有效避免了内存碎片问题,提高了缓存效率。 **目前用户:** 包括LiveJournal、Facebook、mixi、Digg、Wikipedia、...
Slab 机制使用 Chunk 机制来管理内存的分配和释放。 17. slab 主要函数 Memcached 的 Slab 主要函数包括 slab_alloc、slab_free 和 slab_realloc 等,分别用于分配内存、释放内存和重新分配内存。 18. slab 机制...
《memcached源代码分析1.ppt》通常会提供更直观的视觉呈现,包括流程图、内存分配示意图、性能优化策略等。PPT可能涵盖了以下内容: 1. **系统架构**:展示memcached的服务器-客户端通信模型,以及网络协议实现(如...
调优主要包括:内存分配优化,根据业务需求合理设置内存大小;调整 slab 分配策略,避免内存浪费;监控和调整超时时间,确保高并发下系统的响应速度。 七、Memcached与Linux的关系 在Linux环境下,Memcached可以...
同一slab的chunk大小相同,避免了内存碎片,简化了内存分配与释放。 Memcached在Java等编程语言中通常有相应的客户端库,便于开发者集成和使用。其简单高效的设计使其成为许多大型网站和应用的首选缓存解决方案,但...
- `memcached`采用slab分配机制来管理内存,将内存划分为不同大小的chunk,每个chunk对应一个slab类,避免了内存碎片。 6. **libevent事件驱动** - `memcached`利用libevent库实现非阻塞I/O,能够高效处理大量...
- **启动memcached**: 启动命令通常为`memcached -m [memory] -p [port] -u [username] -l [ip_address]`,其中[memory]表示分配给缓存的最大内存,[port]表示监听端口等。 #### 使用Cache::Memcached客户端 - **...
Memcached 使用 slab 分配器管理内存,将内存划分为不同大小的 slab 类。每个 slab 类有特定的 chunk 大小和 perslab(每个 slab 区域包含的 chunk 数量)。这有助于减少内存碎片,提高内存利用率。例如: - slab ...
1. 内存管理:Memcached采用slab分配机制管理内存,将内存分为多个 slab 分区,每个分区内部又细分为多个chunk,以减少内存碎片。 2. 数据存储:键值对存储,键必须是字符串,值可以是任意类型(转换为二进制)。每...