将tcmalloc静态编译到Mysql

在网上看到不少资料说,用google-perftools里的tcmalloc替代glibc的malloc,可以极大改善MySQL在高并发下的性能。在这些资料里提到,有两种办法可以让tcmalloc生效。一是编译链接时加上-ltcmalloc参数;二是使用LD_PRELOAD环境变量,加载libtcmalloc.so动态库文件,替换掉glibc中的malloc。大部分资料似乎都是用第二种办法,看似简单,但是据我所知,很多人在编译安装MySQL的时候,都会加上这样的参数:
--with-mysqld-ldflags=-all-static,也就是会采用静态链接的方式,目的是提高程序的执行效率,这样一来,LD_PRELOAD还能起作用吗?

稳妥起见,还是在编译时加进去比较好。但是编译的时候又碰到问题,试了好几次才成功,记录在这里方便自己,也方便以后同样碰到这个问题的人。

已经在Mysql 5.1.30中编译google-perftools-0.99.2代码成功。mysqld比未编译tcmalloc大了400多K,呵呵。

编译步骤,我们先编译tcmalloc。

为MySQL添加TCMalloc库的安装步骤(Linux环境):

1、64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
wget http://download.savannah.gnu.org/rel...9-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


2、安装google-perftools:
wget http://google-perftools.googlecode.c...-0.99.2.tar.gz
tar zxvf google-perftools-0.99.2.tar.gz
cd google-perftools-0.99.2/
./configure
make && make install

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig



3、以下代码是编译Mysql的参数,请根据你自己的情况取舍,注意红色字符。



代码:
CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
            -fno-exceptions -fno-rtti" ./configure \
            --prefix=/usr/local/mysql --enable-assembler \
            --with-charset=utf8 \
            --with-extra-charsets=gbk,gb2312,latin1 \
            --localstatedir=/opt/mysql-data \
            --with-mysqld-user=mysql --enable-large-files --with-big-tables \
            --without-debug \
            --with-mysqld-ldflags=-all-static \
            --with-client-ldflags=-all-static \
            --enable-thread-safe-client现在执行的脚本

代码:
CFLAGS="-O3" CXX=g++ CXXFLAGS="-O3 -felide-constructors \
            -fno-exceptions -fno-rtti" ./configure \
            --prefix=/usr/local/mysql --enable-assembler \
            --with-charset=utf8 \
            --with-extra-charsets=gbk,gb2312,latin1 \
            --localstatedir=/opt/mysql-data \
            --with-mysqld-user=mysql --enable-large-files --with-big-tables \
            --without-debug \
            --with-mysqld-ldflags="-all-static -ltcmalloc"\
            --with-client-ldflags=-all-static \
            --enable-thread-safe-client

你可能感兴趣的:(编程,linux,mysql,gcc,Google)