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

mysql tcmalloc_Tcmalloc优化MySQL内存管理相关推荐

  1. mysql tcmalloc_tcmalloc优化mysql性能测试

    tcmalloc的算法优化了glibc的malloc等内存分配函数,通过预分配大内存然后分割来避免内存碎片,同时提高内存分配效率,使用场景为多线程,大内存操作 mysql使用tcmalloc可以提高线 ...

  2. Android进阶——性能优化之内存管理机制和垃圾采集回收机制(六)

    文章大纲 引言 一.内存泄漏和内存溢出概述 二.Java运行时内存模型 1.线程私有数据区 1.1.程序计数器PC 1.2.虚拟机栈 1.3 本地方法栈 2.所有线程共享数据区 2.1.Java堆 2 ...

  3. Jemalloc优化MySQL、Nginx/Tengine内存管理

    Jemalloc源于Jason Evans 2006年在BSDcan conference发表的论文:<A Scalable Concurrent malloc Implementation f ...

  4. Android性能优化OOM内存管理——ADJ

    前言 OOM_ADJ (Out of Memory Adjustment)是android系统在内存不足情况下进行内存调整的重要参数.在处理app启动速度的时候,可以设置主线程的优先级,保证主线程占用 ...

  5. mysql myisam 优化,mysql myisam 优化设置 | 很文博客

    mysql myisam 优化设置设置,需要的朋友可以参考下. myisam_max_[extra]_sort_file_size足够大 delay_key_write减少io,提高写入性能 bulk ...

  6. mysql myisam 优化,mysql myisam 优化设置

    mysql myisam 优化设置设置,需要的朋友可以参考下. myisam_max_[extra]_sort_file_size足够大 delay_key_write减少io,提高写入性能 bulk ...

  7. mysql galaxy_优化mysql

    一.SQL优化 1.优化SQL一般步骤 1.1 查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; Com_select:执行SELECT操作的次数,一次查询累加1.其他类似 以下 ...

  8. mysql缓存优化,MySQL优化步骤及my.cnf缓存优化

    MySQL优化步骤及my.cnf缓存优化 1.看机器配置,指三大件:cpu.内存.硬盘 2.看mysql配置参数 3.查系mysql行状态,可以用mysqlreport工具来查看 4.查看mysql的 ...

  9. 性能优化-Bitmap内存管理及优化

    Bitmap作为重要Android应用之一,在很多时候如果应用不当,很容易造成内存溢出,那么这篇文章的目的就在于探讨Bitmap的有效运用及其优化 缓存介绍 当多次发送请求的时候,请求同一内容,为了使 ...

最新文章

  1. Python3中Pillow(PIL)介绍
  2. yii mysql 操作数据库_Yii数据库操作_MySQL
  3. Milvus Windows
  4. 移动端调试 weinre
  5. coredump 断点_coredump调试的使用
  6. 2020-11-7(http协议简介)
  7. 【面试题视频讲解】TreeSet使用示例
  8. 手写自己的MyBatis框架-SqlSession
  9. 贪心算法——洛谷(P1106)删数问题
  10. ip tcp udp mpeg4头结构的定义
  11. CarMaker入门第二课-创建第一个TestRun
  12. 应用于arcgis的代码,长期更新…
  13. JavaScript-WebAPIs学习记录
  14. 目前医疗大数据面临四大挑战
  15. pikachu之xss漏洞学习
  16. 我的XBox手柄怎么有线断连了
  17. 冬季吃山药能防什么病如何挑选
  18. G. The Galactic Olympics
  19. Hologres INSERT ON CONFLICT
  20. c语言程序与设计教学设计,浅谈C语言程序设计课程的教学设计

热门文章

  1. PCL库学习笔记(PCL Visualizer)
  2. 岩棉夹芯板英标BS476-20BS476-22耐火测试
  3. 解决from tensorflow.contrib.data import Dataset ImportError: cannot import name 'Dataset'
  4. PDF怎么在手机编辑签名?这个方法感觉掌握下
  5. avrc语言的头文件和c文件,AVR(ATmega8L)单片机C语言引用头文件问题(新手问题)...
  6. matlab2018中变压器模块,利用MATLAB中Sim+Power+Systems模库时变压器模型的参数计算及其仿真结果比较...
  7. jQuery实现的各种前端网页,种类多样
  8. 豆豆趣事[2012年05月]
  9. c语言 bnf,BNF
  10. mac 爱普生打印机驱动_适用于 Mac 的打印机和扫描仪驱动程序