从“丰巢”快递柜看 Jemalloc 的内存管理

引子 在某些工作负载中，随着时间的推移，内存的使用会逐渐增长，直到 OOM。后面发现是内存碎片问题，而将系统默认的内存分配器（ glibc malloc ）换成 jemalloc ，能有效控制内存的增长上界。 为了解其背后原理，便找来 jemalloc 最初的论文： A Scalable Concurrent malloc(3) Implementation for FreeBSD 来一探究竟。当然，相比 2006 年论文发表时，当前的 jemalloc 可能已经发生了很大改变，因此本文只对当时论文内容负责。更多 jemalloc 机制，大家可以去其 github 仓库 查看文档和源码。 背景 在探讨论文的主要思路之前，我们先简单回顾下 内存分配器 （memory allocator）的 作用 和 边界 。简言之： 对下，向操作系统申请 大块 内存（使用 sbrk 、 mmap…