您好,欢迎访问一九零五行业门户网

Tcmalloc优化MySQL内存管理

与标准的glibc库的malloc相比,tcmalloc在内存的分配效率和速度要高,可以在高并发的情况下很好的控制内存的使用,提高服务器的性
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》
ubuntu 14.04下安装mysql
《mysql权威指南(原书第2版)》清晰中文扫描版 pdf
ubuntu 14.04 lts 安装 lnmp nginx\php5 (php-fpm)\mysql
ubuntu 14.04下搭建mysql主从服务器
ubuntu 12.04 lts 构建高可用分布式 mysql 集群
ubuntu 12.04下源代码安装mysql5.6以及python-mysqldb
1、安装libunwind库:
如果系统是64位的需要先安装libunwind库,32位系统则不需要安装。
libunwind库为基于64位cpu和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的api用于以编程方式辗转开解堆栈的api以及支持c++异常处理机制的api。
# wget
# 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
# 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
本文永久更新链接地址:
其它类似信息

推荐信息