绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
不同内存分配器对RocksDB的影响
2022-04-15 16:12:03

文章来源:

https://blog.cloudflare.com/the-effect-of-switching-to-tcmalloc-on-rocksdb-memory-use/

文章讲的是,在将存储引擎迁移RocksDB的过程中,发现内存使用率异常。

排查发现是内存分配器 glibc的问题,导致存在大量的内存碎片。

因为:

1. 内存按arena分配,arena是一块连续的内存。回收是栈式回收。由于栈顶的未释放,可能造成整个arena不能回收

2. 在高并发多线程环境下,为了减少锁的争用,允许存在多个arena。这些arena被不同的线程使用,但彼此之间独立,意味着空闲空间不能合并,造成浪费

解决方案是,限制 arena 的个数,或使用时总是进行清理,但治标不治本。

与此不同的是,TCMalloc 就是为多线程内存分配而生。TCMalloc 将内存分为三层:

1. 使用层,应用在该层分配内存

2. 中间层,池化设计,使用层释放的内存可被重用,或者交还操作系统

3. 物理层,通过操作系统管理内存

总结:

如果是内存敏感应用, glibc 可不是好选择。请选用TCMalloc,jemalloc 或其他能提升内存使用率的分配器。  

分享好友

分享这个小栈给你的朋友们,一起进步吧。

RocksDB
创建时间:2022-04-15 15:48:12
RocksDB
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • itt0918
    专家
戳我,来吐槽~