`
lz1130
  • 浏览: 403663 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

使用TCMalloc优化mysql

阅读更多
论坛的数据库…………
不说也罢,直接切入正题。

论坛数据库机器很老
CPU:Intel Pentium III Xeon 700 2MB CPU
MEM:1G

之前有调整过my.cnf的配置,跑了许久,还算稳定。因为不是我装的,configure的参数不知道有没有优化,但是内存小我觉得是比较致命的缺点,而且挂的数据库比较多,并发一高,内存更是严重不足。想了很多缓解压力的办法,前段时间在张晏大大的blog里发现篇博客,了解到TCMalloc可以提高mysql在高并发下的性能。又在网上搜索了许多资料,觉得可行,而且很符合我们的实际情况。

什么是TCMalloc?

    TCMalloc意思是线程缓存的malloc。

    TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高服务器在高并发情况下的性能,降低系统负载。

别人翻译的TCMalloc介绍:http://shiningray.cn/tcmalloc-thread-caching-malloc.html

于是乎,今天又做了优化,在此简略记录一下数据,以便日后对比。
开机14天
| Key_read_requests                 | 2088601666 |
| Key_reads                         | 1685046    |
Key_read_requests/Key_reads=1240
1240个请求只有1个从硬盘读取,其他命中缓存。之前有开机时间长的一次看的数据是2000。

TCMalloc安装

编译MYSQL时,configure时不能有这一个参数 with-mysqld-ldflags=-all-static,否则加载失败。

64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
sudo make CFLAGS=-fPIC install


安装google-perftools
./configure
make
sudo make install


设置并更新动态连接库
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr-local-lib.conf
ldconfig


配置mysql启动脚本
sudo vi /usr/local/web/mysql/bin/mysqld_safe
#在:# executing mysqld_safe下加入以下
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so


重启mysql后查看是否加载成功
lsof -n | grep tcmalloc
#mysqld    11046 mysql  mem       REG       72,1    1808415    4693827 /usr/local/lib/libtcmalloc.so.0.0.0


补充
这里有个别人测试的结果:http://www.javayou.com/diary/18368


有人测试成功32位系统静态编译TCMalloc到Mysql,方法是:

要执行的预编译指令
CFLAGS="-O3"
CXX=g++
CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"

在configure时要加入的参数
--with-mysqld-ldflags=-all-static
--with-mysqld-ldflags=-ltcmalloc
#网上都写成了--with-mysqld-ldflags="-all-static -ltcmalloc",结果make错误,分开写没问题
--enable-thread-safe-client
#有人说必须要

这个我没试过,静态编译虽然效率更高,但是感觉兼容性、稳定性会有问题。

2009.10.11
分享到:
评论
3 楼 mathgl 2009-10-15  
Mysql的 conn 部分好像还是 thread pool 模型。 这部份的性能提高应该比较明显。
2 楼 lz1130 2009-10-13  
ray_linn 写道
有点问题...缓存缓解内存压力? 一般来说缓存缓解的是I/O压力。。。


不太明白你说的。TCMalloc的作用是提高内存分配上的效率和速度。
内存分配快,回收快,程序执行的自然快,在高并发下更为明显。
目前我也还在测试。一切以事实说话,几周后做个对比看看。
1 楼 ray_linn 2009-10-13  
有点问题...缓存缓解内存压力? 一般来说缓存缓解的是I/O压力。。。

相关推荐

    mysql tcmalloc安装 - 手册

    TCMalloc(Thread-Caching Malloc)是google开发的开源工具──...与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发情况下的性能,降低系统负载。

    Tcmalloc-v2.10

    tcmalloc 内存管理及内存泄漏

    nginx优化 使用Google的开源TCMalloc库

    1:首先下载libunwind-1.1 ...然后安装 # tar zxvf libunwind-1.1.tar.gz # cd libunwind-1.1 # CFLAGS=-fPIC ./configure # make CFLAGS=-fPIC # make CFLAGS=-fPIC install ...# echo "/usr/local/lib" > /etc...优化完成

    Tcmalloc.zip

    Tcmalloc含最新的libunwind-1.1.tar.gz和gperftools-2.1.tar.gz

    libunwind-1.1.tar.gz

    使用tcmalloc 加速 mysql 和 nginx

    vs2003-tcmalloc静态链接库

    vs2003-tcmalloc静态链接库

    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-...

    tcmalloc排查内存泄漏的方法

    tcmalloc排查内存泄漏的方法

    控制内存增长TCMALLOC.docx

    控制内存增长TCMALLOC

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

    对tcmalloc算法的更改,支持numa架构,在numa架构下有更好的性能

    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.

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

    tcmalloc编译好的lib文件和dll文件,两种编译方式,动态链接库,和静态库两种编译结果。 使用vs2019,x64

    工作小计-性能优化-gperftools/tcmalloc/pprof

    工作小计-性能优化-gperftools/tcmalloc/pprof

    LOK封装的TCMALLOC(TztMM).zip

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

    tcmalloc

    TCM分配该存储库包含TCMalloc C ++代码。 TCMalloc是Google对C的malloc()和C ++的operator new的自定义实现,用于在C和C ++代码中进行内存分配。 TCMalloc是一种快速的多线程malloc实现。构建TCMalloc 是TCMalloc的...

    TCMalloc代码框架

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

    linux系统 64位下编译安装tcmalloc

    google-perftools是一个堆外内存分析工具 默认libunwind安装到/usr/local/lib,使用prefix命令指定安装目录

    tcmalloc库安装指南.txt

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

    gperftools-2.5.tar.gz

    gperftools-2.5.tar.gz ,使用Google PerfTools 之 Tcmalloc优化nginx性能

Global site tag (gtag.js) - Google Analytics