博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis采用tcmalloc导致无法释放内存的问题
阅读量:7197 次
发布时间:2019-06-29

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

redis使用tcmalloc管理内存,当删除了rediskey后,通过redisinfo命令查看内存使用情况,发现内存并没有释放,但是采用默认的jemalloc就不会有这个问题

以下是采用tcmalloc后删除key前和删除key后通过info看到的内存情况:

删除key前:

used_memory:13051400

used_memory_human:12.45M

used_memory_rss:16326656

used_memory_peak:13051400

used_memory_peak_human:12.45M

used_memory_lua:33792

mem_fragmentation_ratio:1.25

mem_allocator:tcmalloc-2.0

删除key

used_memory:835080

used_memory_human:815.51K

used_memory_rss:16392192

used_memory_peak:13051400

used_memory_peak_human:12.45M

used_memory_lua:33792

mem_fragmentation_ratio:19.63

mem_allocator:tcmalloc-2.0

以下是采用jemalloc后删除key前和删除key后通过info看到的内存情况:

删除key前:

used_memory:13047176

used_memory_human:12.44M

used_memory_rss:14704640

used_memory_peak:13047176

used_memory_peak_human:12.44M

used_memory_lua:33792

mem_fragmentation_ratio:1.13

mem_allocator:jemalloc-3.6.0

删除key

used_memory:830696

used_memory_human:811.23K

used_memory_rss:2318336

used_memory_peak:13047176

used_memory_peak_human:12.44M

used_memory_lua:33792

mem_fragmentation_ratio:2.79

mem_allocator:jemalloc-3.6.0

从结果看,删除大量的key后,采用jemallocredis分配的内存缩减为大约2M,而tcmalloc没有变化

TcMalloc的原理参看:

其中提到:目前的tcmalloc版本不会把任何内存返还给操作系统,可见采用tcmalloc时redis实例占用的内存与redis使用内存的峰值有关

JeMalloc的原理可以参看:

其中提到:

回收流程大体和分配流程类似,有tcache机制的会将回收的块进行缓存,没有tcache机制的直接回收(不大于chunk的将对应的page状态进行修改,回收对应的run;大于chunk的直接munmap)。需要关注的是jemalloc何时会将内存还给操作系统,因为ptmalloc中存在因为使用top_chunk机制(详见华庭的文章)而使得内存无法还给操作系统的问题。目前看来,除了大内存直接munmapjemalloc还有两种机制可以释放内存:

1. 当释放时发现某个chunk的所有内存都已经为脏(即分配后又回收)就把整个chunk释放;

2. arena中的page分配情况满足一个阈值时对dirty page进行purge(通过调用madvise来进行)。这个阈值的具体含义是该arena中的dirty page大小已经达到一个chunk的大小且占到了active page1/opt_lg_dirty_mult(默认为1/32)。active page的意思是已经正在使用中的runpage,而dirty page就是其中已经分配后又回收的page

上述两种机制保证了jemalloc不会出现类似ptmalloc中的内存无法交还给操作系统的问题

结论:慎用tcmalloc,采用jemalloc就好。

本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/p/5619168.html,如需转载请自行联系原作者

你可能感兴趣的文章
从串口驱动的移植看linux2.6内核中的驱动模型 platform device & platform driver【转】...
查看>>
100多个基础常用JS函数和语法集合大全
查看>>
[EntLib]微软企业库5.0 学习之路——第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息...
查看>>
[MAC OS] 常用工具
查看>>
[Android Pro] 监听WIFI 打开广播
查看>>
小米2系列板砖自救行动
查看>>
与target_el 相关的 makeNode
查看>>
iOS: 如何调节UITabbarItem的图片和文字位置
查看>>
架构的整理
查看>>
《算法技术手册》一1.3.1 贪心算法
查看>>
到了50岁你还愿意做编程工作吗?
查看>>
为什么防火墙在一步步淡出主流视野
查看>>
中国视频监控市场分析
查看>>
职务犯罪嫌疑人的第十八天科达打造“镇江模式”
查看>>
思科产品再现0Day漏洞CVE-2016-6366 他们用“影子经纪人”泄露的程序 自己发现了EXTRABACON...
查看>>
百年老店松下也在转型——掌门人津贺一宏的几个考量
查看>>
Arbor: DDoS攻击过500G DDoS规模频率都在不断攀升
查看>>
十个步骤使您免受勒索软件伤害
查看>>
公瑾财务成“互联网+财税”领跑者
查看>>
工信部征集绿色数据中心先进适用技术产品
查看>>