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配置設定示例:
一、安裝:
下載下傳: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