您好,登錄后才能下訂單哦!
今天小編給大家分享一下Redis如何采用不同內(nèi)存分配器碎片率對(duì)比的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
在Redis的 zmalloc.c 源碼中,我們可以看到如下代碼:
/* Explicitly override malloc/free etc when using tcmalloc. */
#if defined(USE_TCMALLOC)
#define malloc(size) tc_malloc(size)
#define calloc(count,size) tc_calloc(count,size)
#define realloc(ptr,size) tc_realloc(ptr,size)
#define free(ptr) tc_free(ptr)
#elif defined(USE_JEMALLOC)
#define malloc(size) je_malloc(size)
#define calloc(count,size) je_calloc(count,size)
#define realloc(ptr,size) je_realloc(ptr,size)
#define free(ptr) je_free(ptr)
#endif
從上面的代碼中我們可以看到,Redis在編譯時(shí),會(huì)先判斷是否使用tcmalloc,如果是,會(huì)用tcmalloc對(duì)應(yīng)的函數(shù)替換掉標(biāo)準(zhǔn)的libc中的函數(shù)實(shí)現(xiàn)。其次會(huì)判斷jemalloc是否使得,最后如果都沒有使用才會(huì)用標(biāo)準(zhǔn)的libc中的內(nèi)存管理函數(shù)。
而在最新的2.4.4版本中,jemalloc已經(jīng)作為源碼包的一部分包含在源碼包中,所以可以直接被使用。而如果你要使用tcmalloc的話,是需要自己安裝的。
下面簡(jiǎn)單說一下如何安裝tcmalloc包,tcmalloc是google-proftools中的一部分,所以我們實(shí)際上需要安裝google-proftools。如果你是在64位機(jī)器上進(jìn)行安裝,需要先安裝其依賴的libunwind庫。
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
tar zxvf libunwind-0.99-alpha.tar.gz
cd libunwind-0.99-alpha/
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
Redis怎樣采用不同內(nèi)存分配器碎片率對(duì)比
然后再進(jìn)行g(shù)oogle-preftools的安裝:
wget http://google-perftools.googlecode.com/files/google-perftools-1.8.1.tar.gz
tar zxvf google-perftools-1.8.1.tar.gz
cd google-perftools-1.8.1/
./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal
make && make install
sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf #如果沒有這個(gè)文件,自己建一個(gè)
sudo /sbin/ldconfig
然后再進(jìn)行Redis的安裝,在make時(shí)指定相應(yīng)的參數(shù)以啟用tcmalloc
$ curl -O http://redis.googlecode.com/files/redis-2.4.4.tar.gz
$ tar xzvf redis-2.4.4.tar.gz
$ cd redis-2.4.4
$ make USE_TCMALLOC=yes FORCE_LIBC_MALLOC=yes
$ sudo make install
再啟動(dòng)Redis后通過info命令就能看到使用的內(nèi)存分配器了。
下面回到本文的主題,對(duì)于tcmalloc,jemalloc和libc對(duì)應(yīng)的三個(gè)內(nèi)存分配器。其性能和碎片率如何呢?下面是一個(gè)簡(jiǎn)單測(cè)試結(jié)果,數(shù)據(jù)摘自采用不同分配器時(shí)Redis info信息。我們可以看到,采用tcmalloc時(shí)碎片率是最低的,為1.01,jemalloc為1.02,而libc的分配器碎片率為1.31,如下所未:
used_memory:708391440
used_menory_human:675.57M
used_memory_rss:715169792
used_memory_peak:708814040
used_memory_peak_human:675.98M
mem_fragmentation_ratio:1.01
mem_allocator:tcmalloc-1.7
used_memory:708381168
used_menory_human:675.56M
used_memory_rss:723587072
used_memory_peak:708803768
used_memory_peak_human:675.97M
mem_fragmentation_ratio:1.02
mem_allocator:jemalloc-2.2.1
used_memory:869000400
used_menory_human:828.74M
used_memory_rss:1136689152
used_memory_peak:868992208
used_memory_peak_human:828.74M
mem_fragmentation_ratio:1.31
mem_allocator:libc
以上就是“Redis如何采用不同內(nèi)存分配器碎片率對(duì)比”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。