mysql tcmalloc_Tcmalloc优化MySQL内存管理

TCMalloc是一个高效的内存分配器,优于标准的glibc malloc。它能提升并发场景下的内存管理效率,降低服务器负载。在Ubuntu 14.04上,可以通过安装libunwind和gperftools来引入TCMalloc。安装完成后,可以通过静态编译MySQL或动态加载LD_PRELOAD来使用TCMalloc。验证其生效可通过检查mysqld进程是否加载了libtcmalloc.so。

TCMalloc是什么?

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》http://www.linuxidc.com/Linux/2014-07/104511.htm

Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL http://www.linuxidc.com/Linux/2014-05/102351.htm

1、安装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.1CFLAGS=-fPIC ./configure

# make CFLAGS=-fPIC

# make CFLAGS=-fPIC install

# cd ..

注意:这里是使用默认配置安装的,默认路径为/usr/local,libunwind库应该是安装在/usr/local/lib目录下

2、gperftools的安装:

# wget http://gperftools.googlecode.com/files/gperftools-2.1.tar.gz

# tar xzf gperftools-2.1.tar.gz

# cd gperftools-2.1

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

64位操作系统,如下

# ./configure

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

# ./configure --enable-frame-pointers

然后, make && make install

# make && make install

注意:这里也是使用默认配置安装的,默认路径为/usr/local,且Tcmalloc库也是是安装在/usr/local/lib目录下

安装完成之后,建议TCmaloc库加载到Linux系统中,具体操作如下:

# echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf

# /sbin/ldconfig    #必须执行

3、使用TCMalloc优化MySQL

使用tcmalloc优化Mysql可以通过两种方法来实现,分别为:动态加载、静态编译

采用静态编译:

MySQL 5.1静态编译方法,./configure预编译时假设下面参数

--with-mysqld-ldflags=-ltcmalloc

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

-DCMAKE_EXE_LINKER_FLAGS="-ltcmalloc" -DWITH_SAFEMALLOC=OFF

采用动态加载:

动态加载比较方便,不需要重新安装mysql,只需要修改在mysqld_safe添加一条语句然后重启就行。具体操作如下:

# vim /usr/local/mysql/bin/mysqld_safe

···

export LD_PRELOAD="/usr/local/lib/libtcmalloc.so"

···

# service mysqld restart

注意:这里必须在LD_PRELOAD前面加上export,否则不生效。

或者采用以下方式

# 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

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

[root@localhost bin]# lsof -n | grep tcmalloc

mysqld  3166  mysql mem    REG  8,2  1853298  32406 /usr/local/lib/libtcmalloc.so.4.1.2

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值