概述
主要的内存分配接口是“malloc”。当进程使用malloc请求一个非常大的本地内存块的时候,底层会使用mmap系统调用来查询可寻址的内存空间。然后,它根据自己的分配算法管理这些内存块,这个算法可能会导致内存碎片。
改变默认的malloc分配器可以解决可能的本地内存碎片问题(本地内存泄漏)。可替代方案有:jemalloc、tcmalloc及mimalloc。
经过对除了mimalloc之外的几种顶级的分配算法进行广泛的基准测试,发现mimalloc总是优于其他的几种分配器,包括jemalloc、tcmalloc、Hoard等等,并且通常使用的内存数会更少(最多可以降低25%的内存消耗)。
使用mimalloc分配器
1、下载或使用git下载源码
https://github.com/microsoft/mimalloc
由于使用git需要科学上网,本人使用的是zip版本源码
2、编译
unzip mimalloc-master.zip
cd mimalloc-master/
mkdir -p out/release
cd out/release/
cmake ../../
make
3、设置环境变量
cp out/release/libmimalloc.so.2.0 /usr/lib/libmimalloc.so
vi /etc/profile
export LD_PRELOAD=/usr/lib/libmimalloc.so
source /etc/profile
或
. /etc/profile
使用如下命令查看分配器是否设置成功:
ldd /usr/bin/pigz
如果输出如下图所示,则表示分配器已经设计成功:
