日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

利用TCMalloc替换Nginx和Redis默认glibc库的malloc内存分配

發布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用TCMalloc替换Nginx和Redis默认glibc库的malloc内存分配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TCMalloc的全稱為Thread-Caching Malloc,是谷歌開發的開源工具google-perftools中的一個成員。與標準的glibc庫的Malloc相比,TCMalloc庫在內存分配效率和速度上要高很多,這在很大程度上提高了服務器在高并發情況下的性能,從而降低了系統的負載。

1.安裝libunwind庫
?可以從http://download.savannah.gnu.org/releases/libunwind下載相應的libunwind版本
#wget http://ftp.twaren.net/Unix/NonGNU//libunwind/libunwind-1.1.tar.gz
#tar zxvf libunwind-1.1.tar.gz
#cd libunwind-1.1
#CFLAGS=-fPIC ./configure?
#make CFLAGS=-fPIC?
#make CFLAGS=-fPIC install

?

2.安裝google-perftools
#wget http://gperftools.googlecode.com/files/gperftools-2.1.tar.gz
#tar zxvf gperftools-2.1.tar.gz
#cd gperftools-2.1
# ./configure?
#make && make install?
#echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf?
# ldconfig

?

3.編譯安裝nginx

# wget http://nginx.org/download/nginx-1.4.2.tar.gz

# tar -zvxf nginx-1.4.2.tar.gz

# cd ./nginx-1.4.2

注意需要添加--with-google_perftools_module

#./configure --with-google_perftools_module --prefix=/usr/local/nginx?

參考:Linux環境Nginx安裝與調試(Nginx+PHP/phpfpm)

#make

#make install

?

4.修改Nginx主配置文件

修改nginx.conf文件,在pid這行的下面添加如下代碼:
#pid??????? logs/nginx.pid;?
google_perftools_profiles /tmp/tcmalloc;

同時我們設置nginx啟動2個工作進程

worker_processes? 2;
daemon on;
master_process? on;

?

5.為google-perftools添加線程目錄

創建一個線程目錄,將文件放在/tmp/tcmalloc下。

#mkdir /tmp/tcmalloc
#chmod 0777 /tmp/tcmalloc

?

6.啟動Nginx

#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

?

7.驗證運行狀態
為了驗證google-perftools已經正常加載,可通過如下命令查看:
# lsof -n | grep tcmalloc?

?

8.安裝redis

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

在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-2.4以上自帶jemalloc,你不需要加任何參數,通過zmalloc.c源碼中我們可以看到,Redis在編譯時,會先判斷是否使用tcmalloc,如果是,會用tcmalloc對應的函數替換掉標準的libc中的函數實現。其次會判斷jemalloc是否使得,最后如果都沒有使用才會用標準的libc中的內存管理函數。所以用tcmalloc優化請謹慎使用,這兩著分配器碎片率相差不大,建議用自帶jemalloc。


如果要安裝tcmalloc可以這樣:

注意需要刪除原先的redis的解壓文件,不然安裝無效

# make USE_TCMALLOC=yes

# make install


檢測tcmall信息

使用info命令查看內存信息:



更多參考:

使用Google的開源TCMalloc庫,提高MySQL在高并發情況下的性能[張宴原創]

輕量級HTTP服務器Nginx(Nginx性能優化技巧)

TCMalloc:線程緩存的Malloc

TCMalloc優化MySQL、Nginx、Redis內存管理

2012年tcmalloc學習筆記之一

總結

以上是生活随笔為你收集整理的利用TCMalloc替换Nginx和Redis默认glibc库的malloc内存分配的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。