天天看点

mysql使用jemalloc来优化innodb缓冲池

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分配示例:

mysql使用jemalloc来优化innodb缓冲池
mysql使用jemalloc来优化innodb缓冲池

一、安装:

下载: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

继续阅读