设为首页 收藏本站
查看: 1286|回复: 0

[经验分享] memcached演练(5) 内存管理

[复制链接]

尚未签到

发表于 2018-12-24 13:16:48 | 显示全部楼层 |阅读模式
  memcached 是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。很显然,弄清楚它的内存存储,很有必要。还是那句话,不需要兜书包了,把自己整理的相关memcached内存管理方面的框架图分享一下。
  
  

  个人喜欢把内存管理,分为3个学习单元。

  •   如何分配内存?

  •   如何回收内存?
  •   如何监控内存?
  当然,本文的主要演练重点也有了。

  •   内存如何分配

  •   内存如何回收
  •   认识监控参数
  •   验证一些边界数据
  1.如何分配内存?
  1.1 默认启动内存分配情况


  这段输出日志,可以分成2部分阅读。第一部分是slab内存分配信息;第二个:启用监听情况。
  有3点没太搞清楚。

  •   为什么每次启动都是2个"send buffer....",而且都是28,32。

  •   每个server listening前面的26-35的数字编号是何含义?为什么不从0开始。
  •   括号里面的udp,是说明监听UDP类型协议吗?监听TCP协议监听呢呢?
  有对这一块比较清楚的麻烦指导下,但还好不清楚这几点不影响大局。
  1.2 自定义启动规则

  接下来,通过修改下启动参数,看下输出的日志。对比学习下。

  通过对比,我们很容易理解一些基本概念。chunk size,增长因子。
  值得一提的的有一个指标。

## -t 4时,监控curr_connections
## 4*2+2=10
[root@hadoop1 hadoop]# echo stats | nc 127.0.0.1 11211 |grep connection
STAT curr_connections 10
## -t 2时,监控curr_connections
## 2*2+2=6
[root@hadoop1 hadoop]# echo stats | nc 127.0.0.1 11211 |grep connection
STAT curr_connections 6  3. 监控保存数据前后slab信息

  保存数据之前监控slabs信息如下
[root@hadoop1 hadoop]# echo stats slabs | nc 127.0.0.1 11211
STAT active_slabs 0
STAT total_malloced 0  保存数据之后监控slabs信息如下
set key 1 1 1
1
STORED
set key2 1 0 1
1
STORED
set key2 1 0 1
1
STORED
set key3 1 0 1
3
STORED
[root@hadoop1 hadoop]# echo stats slabs | nc 127.0.0.1 11211
STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
STAT 1:total_pages 1
STAT 1:total_chunks 13107
STAT 1:used_chunks 2
STAT 1:free_chunks 13105
STAT 1:free_chunks_end 0
STAT 1:mem_requested 108
STAT 1:get_hits 0
STAT 1:cmd_set 4
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048560
END  通过分析日志,可以很清楚的知道,发起的操作记录。
  共发起了4个set或add操作.使用了2个大小为80的chunk。
  值得一提下,保存的数据都非常小,却占用了160字节。好心疼浪费的存储空间啊。
  通过监控total_malloced指标,还验证了,memcached采用预分配,分组管理方式。
  当真正有数据保存时,才真正分配内存空间。而且,只有slab class被使用了之后,才能通过stat slabs监控到。
  2.内存如何回收
  内存回收不太方便验证,LRU算法使用情况,我们可以从侧面验证下。
  我的演练思路:批量添加等大小的数据。然后dump出想要数据,确认下最小的KEY。
  虽然简单粗暴,但大体可以说明LRU算法吧。
  2.1 准备批量添加数据代码
  使用的是《memcached演练(2) 访问memcached服务 》提到的spymemcached
public void test111() throws ExecutionException, InterruptedException {
    final MemcachedClient mcc = MemcachedUtil.getSpyMemcachedClient();
   final Lock lock = new ReentrantLock();
    final String value="abcdef.....";
    //不停的set值
  Thread t1=  new Thread(new Runnable() {
        @Override
        public void run() {
            for(int i=0;i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655334-1-1.html 上篇帖子: memcached的一些简单使用 下篇帖子: memcached部署安装文档
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表