jemalloc是一个malloc()碎片避免和可扩展的并发支持的实现。
它旨在用作系统提供的内存分配器,如FreeBSD的libc库,以及链接到C / C ++应用程序。jemalloc提供了许多超出标准分配器功能的内省,内存管理和调优功能。作为一个极端的例子,arenas可以用作池分配器; 即arenas可用于通用分配,然后整个arenas作为单一操作被销毁。
jemalloc首次分配小/大对象时,应用程序线程以循环方式分配给arenas。arenas完全相互独立。他们维护自己的块,从中为小/大对象雕刻页面运行。无论哪个线程执行释放,释放的内存总是返回到它所来自的arenas。
相关概念:
arena chunk:
虚拟内存被逻辑上分割成chunks
arenas:
malloc是统一来管理内存,就像一个池塘,所有内存就是一个池塘。而jemalloc是把这个池塘划分为几个小块,为每个进程分配一个块,各个块之间相互独立,这个块就称之为arenas。
Thread cache:
各个线程每一个都分配到一个arenas,使之完全相互独立,互不干扰。
arenas分配示例:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQUM4kTO2QUN9U2bmcDOjVmZlVWOmhTZ4IDOiJjZwkTZklTMihTO3IWZkVjN9g2bmgHeuITLzc2ao1CduVGdu92Yz1Ddo91Yu9lJzATM9QXYj91Yu91PnBnau42X4YDO5YTN18VO5EjMzMDO0MDM5QzX0QzN4YTMvwVOtAjLxQ3LcZ3LcRXZu5ibkNmYm5Ce45iMtMzZrhWL05WZ052bjN3Lc9CX6MHc0RHaiojIsJye.jpg)
一、安装:
下载:wget https://github.com/jemalloc/jemalloc/releases/download/5.2.0/jemalloc-5.2.0.tar.bz2
解压:tar -jxf jemalloc-5.2.0.tar.bz2
cd jemalloc-5.2.0
编译:./configure --prefix=/usr/local/jemalloc --libdir=/usr/lib
安装:make && make install
加入:echo /usr/lib >> /etc/ld.so.conf
调用:ldconfig
二、mysql配置:
vim my.cnf:
[mysqld_safe]
malloc-lib=/usr/lib/libjemalloc.so
三、启动mysql,查看是否生效:
lsof -n|grep libjemalloc.so