麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Redis > 正文

淺談redis采用不同內存分配器tcmalloc和jemalloc

2020-03-17 12:39:34
字體:
來源:轉載
供稿:網友

我們知道Redis并沒有自己實現內存池,沒有在標準的系統內存分配器上再加上自己的東西。所以系統內存分配器的性能及碎片率會對Redis造成一些性能上的影響。

在Redis的 zmalloc.c 源碼中,我們可以看到如下代碼:

/* Double expansion needed for stringification of macro values. */ #define __xstr(s) __str(s) #define __str(s) #s #if defined(USE_TCMALLOC) #define ZMALLOC_LIB ("tcmalloc-" __xstr(TC_VERSION_MAJOR) "." __xstr(TC_VERSION_MINOR)) #include <google/tcmalloc.h> #if (TC_VERSION_MAJOR == 1 && TC_VERSION_MINOR >= 6) || (TC_VERSION_MAJOR > 1) #define HAVE_MALLOC_SIZE 1 #define zmalloc_size(p) tc_malloc_size(p) #else #error "Newer version of tcmalloc required" #endif #elif defined(USE_JEMALLOC) #define ZMALLOC_LIB ("jemalloc-" __xstr(JEMALLOC_VERSION_MAJOR) "." __xstr(JEMALLOC_VERSION_MINOR) "." __xstr(JEMALLOC_VERSION_BUGFIX)) #include <jemalloc/jemalloc.h> #if (JEMALLOC_VERSION_MAJOR == 2 && JEMALLOC_VERSION_MINOR >= 1) || (JEMALLOC_VERSION_MAJOR > 2) #define HAVE_MALLOC_SIZE 1 #define zmalloc_size(p) je_malloc_usable_size(p) #else #error "Newer version of jemalloc required" #endif #elif defined(__APPLE__) #include <malloc/malloc.h> #define HAVE_MALLOC_SIZE 1 #define zmalloc_size(p) malloc_size(p) #endif #ifndef ZMALLOC_LIB #define ZMALLOC_LIB "libc" #endif 

從上面的代碼中我們可以看到,Redis在編譯時,會先判斷是否使用tcmalloc,如果是,會用tcmalloc對應的函數替換掉標準的libc中的函數實現。其次會判斷jemalloc是否使得,最后如果都沒有使用才會用標準的libc中的內存管理函數。

而在最新的2.4.4版本中,jemalloc已經作為源碼包的一部分包含在源碼包中,所以可以直接被使用。而如果你要使用tcmalloc的話,是需要自己安裝的。

下面簡單說一下如何安裝tcmalloc包,tcmalloc是google-proftools中的一部分,所以我們實際上需要安裝google-proftools。如果你是在64位機器上進行安裝,需要先安裝其依賴的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

然后再進行google-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 #如果沒有這個文件,自己建一個 sudo /sbin/ldconfig

然后再進行Redis的安裝,在make時指定相應的參數以啟用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

再啟動Redis后通過info命令就能看到使用的內存分配器了。

下面回到本文的主題,對于tcmalloc,jemalloc和libc對應的三個內存分配器。其性能和碎片率如何呢?

下面是一個簡單測試結果,使用Redis自帶的redis-benchmark寫入等量數據進行測試,數據摘自采用不同分配器時Redis info信息。

我們可以看到,采用tcmalloc時碎片率是最低的,為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.01mem_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.02mem_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.31mem_allocator:libc

上面的測試數據都是小數據,也就是說單條數據并不大,下面我們嘗試設置benchmark的-d參數,將value值調整為1k大小,測試結果發生了一些變化:

used_memory:830573680 used_memory_human:792.10M used_memory_rss:849068032 used_memory_peak:831436048 used_memory_peak_human:792.92M mem_fragmentation_ratio:1.02mem_allocator:tcmalloc-1.7

used_memory:915911024 used_memory_human:873.48M used_memory_rss:927047680 used_memory_peak:916773392 used_memory_peak_human:874.30M mem_fragmentation_ratio:1.01mem_allocator:jemalloc-2.2.1

used_memory:771963304 used_memory_human:736.20M used_memory_rss:800583680 used_memory_peak:772784056 used_memory_peak_human:736.98M mem_fragmentation_ratio:1.04mem_allocator:libc

可以看出,在分配大塊內存和小塊內存上,幾種分配器的碎片率差距還是比較大的,大家在使用Redis的時候,還是盡量用自己真實的數據去做測試,以選擇最適合自己數據的分配器。

以上就是小編為大家帶來的淺談redis采用不同內存分配器tcmalloc和jemalloc全部內容了,希望大家多多支持VEVB武林網~

 

注:相關教程知識閱讀請移步到Redis頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麻豆自拍偷拍视频 | 国产91丝袜在线播放 | 亚洲精品v天堂中文字幕 | 成人三级电影网站 | 轻点插视频 | 欧美日韩亚洲成人 | 国产精品久久久久久影视 | 免费一级特黄欧美大片勹久久网 | 成人免费av在线播放 | xxxxhd86日本护士hd | 成人做爰高潮片免费视频韩国 | 天海翼四虎精品正在播放 | 国产亚洲黑人性受xxxx精品 | 亚洲成人中文字幕在线 | 日韩欧美精品电影 | 操碰视频在线观看 | 夜夜夜精品视频 | 精品视频一区二区三区四区 | 久久精品日韩一区 | 欧美18一12sex性处hd | 久久国产一级片 | 久久九九热re6这里有精品 | 欧美扩阴视频 | 91精品国产92久久久久 | 国产精品成人免费一区久久羞羞 | 欧美一区二区三区不卡免费观看 | 午夜小视频免费观看 | 91av在线影院 | 久久网一区二区 | 精品一区二区久久久久久按摩 | 最新一区二区三区 | 欧美成人免费电影 | 欧美××××黑人××性爽 | 精品中文一区 | 黄色视频a级毛片 | 国内精品久久久久久久星辰影视 | 成年免费大片黄在线观看岛国 | 涩涩激情网 | 一边吃奶一边摸下娇喘 | 久久99精品国产99久久6男男 | 日日摸夜夜骑 |