1. 程式人生 > >jemalloc linux快速上手

jemalloc linux快速上手

jemalloc在linux上從安裝到使用

redis有用到jemalloc。

首先,jemalloc是幹什麼的?  我們看看作者自己的介紹:

jemalloc is a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support

意思是說jemalloc幹了malloc乾的活,而且幹得好一些,主要體現在避免記憶體碎片與併發擴充套件上。

首先,什麼是記憶體碎片?

 malloc/free或new/delete大量使用後回造成記憶體碎片,那麼這種碎片形成的機理是什麼?       如果機理是申請的記憶體空間大小(太小)所形成的,那麼,申請多大的區域能夠最大限度的避免記憶體碎片呢?(這裡的避免不是絕對的避免,只是一種概率)     記憶體碎片一般是由於空閒的連續空間比要申請的空間小,導致這些小記憶體塊不能被利用。產生記憶體碎片的方法很簡單,舉個例:       假設有一塊一共有100個單位的連續空閒記憶體空間,範圍是0~99。如果你從中申請一塊記憶體,如10個單位,那麼申請出來的記憶體塊就為0~9區間。這時候你繼續申請一塊記憶體,比如說5個單位大,第二塊得到的記憶體塊就應該為10~14區間。       如果你把第一塊記憶體塊釋放,然後再申請一塊大於10個單位的記憶體塊,比如說20個單位。因為剛被釋放的記憶體塊不能滿足新的請求,所以只能從15開始分配出20個單位的記憶體塊。       現在整個記憶體空間的狀態是0~9空閒,10~14被佔用,15~24被佔用,25~99空閒。其中0~9就是一個記憶體碎片了。如果10~14一直被佔用,而以後申請的空間都大於10個單位,那麼0~9就永遠用不上了,造成記憶體浪費。       如果你每次申請記憶體的大小,都比前一次釋放的內村大小要小,那麼就申請就總能成功。 

記憶體碎片很可怕嗎?  短時間內不明顯,對於線上的伺服器比如nginx,執行時間可能經年,每天幾億的請求量,如果每天產生100片 ,一年下來也是3萬多片 ,相當恐怖!

jemalloc可以有效的解決這個問題!  jemalloc的效能圖(上篇已經展示過): 這裡寫圖片描述

既然jemalloc這麼牛逼,我們就來安裝吧!

下載到linux目錄下解壓:

tar -xjvf jemalloc-4.2.1.tar.bz2  生成的檔案列表如下: 這裡寫圖片描述

在此目錄下預編譯

./configure –prefix=/usr/local/jemalloc

完成後再編譯:

make -j8 && make install

我們到生成目錄去看看:

這裡寫圖片描述

生成的標頭檔案在include裡,庫在lib裡。

至此,安裝算是完成了。

下面看看如何使用:  在編譯連結時直接指向jemalloc即可:

gcc -g -c -o 1.o 1.c  gcc -g -o 1.out 1.o -L/usr/local/jemalloc/lib -ljemalloc

執行程式時可能會報找不到庫: 這裡寫圖片描述

只要將jemalloc的庫被系統找到即可:

echo /usr/local/jemalloc/lib >> /etc/ld.so.conf  ldconfig

再次執行即可