`
lu2002lulu
  • 浏览: 97960 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

将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
分享到:
评论

相关推荐

    tcmalloc源代码及编译安装教程

    安装tcmalloc所需的源代码,和完整编译安装应用过程。 unzip tcmalloc.zip tar -zxvf gperftools-2.1.tar.gz cd gperftools-2.1 ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-...

    vs2003-tcmalloc静态链接库

    2. **大对象处理**:对于大对象(通常定义为超过一定阈值的对象),Tcmalloc会直接将它们分配到堆上,避免了小块内存池的管理开销。 3. **快速释放**:Tcmalloc采用了一种称为"中央缓存"的设计,当线程结束时,未...

    MySQL 使用Google的TCMalloc库,提高MySQL的性能.docx

    在Linux环境下,将TCMalloc集成到MySQL的过程主要包括以下几个步骤: 1. **安装libunwind库**:对于64位系统,libunwind库是必需的,因为它提供了堆栈辗转开解的功能,对64位CPU和操作系统上的程序至关重要,特别是...

    tcmalloc编译好的lib文件和dll文件

    2. **静态链接**:若选择静态链接,需要将`tcmalloc.lib`文件添加到项目的链接器输入中,这样编译后的程序就不依赖外部的dll文件。但是,由于静态链接,程序体积会增加,并且不会享受到tcmalloc库的单独更新。 **...

    Tcmalloc.zip

    要使用Tcmalloc,你需要首先解压并编译gperftools-2.1.tar.gz,然后将其链接到你的应用程序中。通常,这涉及到设置CFLAGS和LDFLAGS环境变量,以包含tcmalloc的头文件和库文件。完成编译后,你可以使用gperftools提供...

    linux系统 64位下编译安装tcmalloc

    如果一切顺利,tcmalloc的相关库文件将会被安装到你指定的位置。 在`config`文件中,通常包含了编译选项和配置设置,如CFLAGS、CXXFLAGS、LDFLAGS等,这些会影响编译过程。例如,可能需要添加额外的链接选项来链接`...

    linux centos 编译安装Mysql.zip

    本指南将详细阐述如何在CentOS上从源代码编译安装MySQL。 首先,确保你的系统是最新的,可以通过运行`sudo yum update`来完成。接下来,安装编译MySQL所需的依赖包,包括GCC编译器、开发库等: 1. 安装基础依赖: ...

    Tcmalloc-v2.10

    2. **大小类管理**:tcmalloc将不同大小的内存请求分为多个类别,每个类别有特定的分配策略,例如,小于64字节的小对象直接从线程缓存分配,大对象则直接从更大的内存池中分配。 3. **内存碎片控制**:通过精心设计...

    tcmalloc排查内存泄漏的方法

    在本文中,我们将介绍如何使用tcmalloc来排查内存泄漏的方法。 安装gperftools 首先,我们需要安装gperftools这个工具包,可以使用以下命令来安装: wget ...

    控制内存增长TCMALLOC.docx

    2. **设置LD_PRELOAD环境变量**:将找到的TCMalloc库文件路径添加到`LD_PRELOAD`环境变量中,以便在运行应用程序时优先加载TCMalloc库。 ```bash export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtcmalloc_...

    基于numa架构的tcmalloc内存管理算法

    在讨论基于NUMA架构的TCMalloc内存管理算法之前,我们先来深入了解NUMA架构和TCMalloc算法的概念及其在内存管理中的作用。 NUMA(Non-Uniform Memory Access)架构是一种多处理器架构,其中每个处理器(CPU)有其...

    tcmalloc 安装包

    These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-... Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.

    tcmalloc 源代码工程

    These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-... Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.

    MySQL5.5-deps

    2. **开发工具和库**:如gcc编译器,用于编译MySQL源码;make工具,帮助构建和安装软件;openssl库,用于加密和安全通信。 3. **系统工具**:如Perl,用于处理系统脚本和配置;readline库,提供命令行编辑功能;...

    LOK封装的TCMALLOC(TztMM).zip

    这个tcmalloc很出名了,是google出的内存管理模块,比传统模块控制更合理,能应付更高的并发,而且也更稳定. 不过这个模块不是系统自带的,没有原生安装,所以需要手动去安装操作,稍微有点麻烦.这个模块包含在google封装...

    基于C++的TCMalloc内存优化模块设计源码

    本项目为基于C++语言的TCMalloc内存优化模块的设计...TCMalloc(google-perftools)旨在优化多线程C++应用的内存分配,相比glibc 2.3的malloc具有更高的性能,特别适用于MySQL等数据库在高并发环境下的内存稳定性需求。

    tcmalloc库安装指南.txt

    tcmallc内存库的安装方法,然后在编译时将其静态链接到库cmimpl 。 target_link_libraries(cmimpl -pthread ) #######静态链接c++库################### SET_TARGET_PROPERTIES(cmimpl PROPERTIES LINK_FLAGS "-...

    tcmalloc

    文献资料TCMalloc的所有用户应查阅以下文档资源: 涵盖下载,安装,构建和测试TCMalloc,包括将其合并到您的代码库中。 介绍了的基本体系结构,以及它如何影响配置选择。 《 涵盖了C和C ++ TCMalloc API端点。 ...

    TCMalloc代码框架

    项目简介:该项目实现了一个简易的高并发内存池框架,将内存池设计为thread cache、central cache、page cache三层架构,从而实现高效的多线程内存管理。 核心技术:链表、哈希桶、操作系统内存管理、单例模式的设计...

Global site tag (gtag.js) - Google Analytics