Heim > Datenbank > MySQL-Tutorial > TCMalloc优化MySQL、Nginx、Redis内存储器管理

TCMalloc优化MySQL、Nginx、Redis内存储器管理

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 16:15:28
Original
1022 Leute haben es durchsucht

TCMalloc优化MySQL、Nginx、Redis内存管理 TCMalloc(Thread-Caching Malloc)与标准glibc库的malloc实现一样的功能,但是TCMalloc在效率和速度效率都比标准malloc高很多。TCMalloc是 google-perftools工具中的一个(gperftools四个工具分别是:TCMalloc、heap-

TCMalloc优化MySQL、Nginx、Redis内存管理

TCMalloc(Thread-Caching Malloc)与标准glibc库的malloc实现一样的功能,但是TCMalloc在效率和速度效率都比标准malloc高很多。TCMalloc是 google-perftools工具中的一个(gperftools四个工具分别是:TCMalloc、heap-checker、heap- profiler和cpu-profiler),这个工具是开源的,以源码形式发布。如果觉得自己维护一个内存分配器麻烦的话,可以考虑将 TCMalloc静态库连接到你的程序中。使用的时候和glibc中的malloc调用方式一模一样。你需要做的只是把TCMalloc的动态库或者静态 库连接进你的程序中,你就可以获得一个高效,快速,安全的内存分配器。?

与标准的glibc库的malloc相比,TCMalloc在内存的分配效率和速度要高,可以在高并发的情况下很好的控制内存的使用,提高服务器的性能,降低负载。TCMalloc的实现原理和测试报告请见一篇文章:《?TCMalloc:线程缓存的Malloc?

tcmalloc作为可选项已经添加到?lnmp最新源码一键安装包?

安装libunwind库:?
如果系统是64位的需要先安装libunwind库,32位系统则不需要安装。?

libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。

wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz
tar zxf libunwind-1.1.tar.gz
cd libunwind-1.1
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
cd ../
Nach dem Login kopieren

gperftools的安装:

wget http://gperftools.googlecode.com/files/gperftools-2.1.tar.gz
tar xzf gperftools-2.1.tar.gz
cd gperftools-2.1
Nach dem Login kopieren

可以加入参数只编译tcmalloc(./configure --enable-minimal、--disable-cpu-profiler、--disable-heap-profiler、 --disable-heap-checker、--disable-debugalloc),64位操作系统不安装libunwind也不会报错,注意 生成的库文件是libtcmalloc_minimal.*?
64位操作系统,如下

./configure
Nach dem Login kopieren

32位系统,不需要安装libunwind,但是一定要添加–enable-frame-pointers参数,如下

./configure --enable-frame-pointers
Nach dem Login kopieren
make && make install
Nach dem Login kopieren

编译安装后,输入以下命令:

echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig #必须执行
Nach dem Login kopieren

使用TCMalloc优化MySQL?
MySQL 5.1静态编译方法,./configure预编译时假设下面参数?

--with-mysqld-ldflags=-ltcmalloc
Nach dem Login kopieren

MySQL 5.5?静态编译方法?,cmake预编译时加上下面参数

-DCMAKE_EXE_LINKER_FLAGS="-ltcmalloc" -DWITH_SAFEMALLOC=OFF
Nach dem Login kopieren

采用动态加载

sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libtcmalloc.so@' /usr/local/mysql/bin/mysqld_safe
service mysqld restart
Nach dem Login kopieren

验证加载tcmalloc在MySQL中是否生效,如下:

lsof -n | grep tcmalloc
Nach dem Login kopieren
Nach dem Login kopieren

使用TCMalloc优化Nginx?
为了使nginx支持google-perftools,需要在安装过程中添加"--with-google_perftools_module"选项重新编译nginx。安装如下:

cd lnmp/src/nginx-1.4.2
make clean
./configure --prefix=/usr/local/nginx --user=www --group=www \
--with-http_stub_status_module --with-http_ssl_module --with-http_flv_module \
--with-http_gzip_static_module --with-google_perftools_module
make && make install
Nach dem Login kopieren

为添加线程目录:

mkdir /tmp/tcmalloc
chown -R www.www /tmp/tcmalloc
vi /usr/local/nginx/conf/nginx.conf #pid下一行添加
google_perftools_profiles /tmp/tcmalloc;
Nach dem Login kopieren

验证tcmalloc是否在Nginx中生效

lsof -n | grep tcmalloc
Nach dem Login kopieren
Nach dem Login kopieren

每个线程(work_processes的值)会有一行记录。每个线程文件后面的数字值就是启动的nginx的pid值。?

使用TCMalloc优?化redis?
注意:redis-2.4以上自带jemalloc?,你不需要加任何参数, 通过zmalloc.c源码中我们可以看到,Redis在编译时,会先判断是否使用tcmalloc,如果是,会用tcmalloc对应的函数替换掉标准 的libc中的函数实现。其次会判断jemalloc是否使得,最后如果都没有使用才会用标准的libc中的内存管理函数。所以用tcmalloc优化请 谨慎使用,这两着分配器碎片率相差不大,建议用自带jemalloc?

cd lnmp/src/redis-2.6.16
make USE_TCMALLOC=yes FORCE_LIBC_MALLOC=yes
/bin/cp src/{redis-benchmark,redis-check-aof,redis-check-dump,redis-cli,redis-sentinel,redis-server} /usr/local/redis/bin
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage