mysql tcmalloc_Tcmalloc优化MySQL内存管理
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内存管理相关推荐
- mysql tcmalloc_tcmalloc优化mysql性能测试
tcmalloc的算法优化了glibc的malloc等内存分配函数,通过预分配大内存然后分割来避免内存碎片,同时提高内存分配效率,使用场景为多线程,大内存操作 mysql使用tcmalloc可以提高线 ...
- Android进阶——性能优化之内存管理机制和垃圾采集回收机制(六)
文章大纲 引言 一.内存泄漏和内存溢出概述 二.Java运行时内存模型 1.线程私有数据区 1.1.程序计数器PC 1.2.虚拟机栈 1.3 本地方法栈 2.所有线程共享数据区 2.1.Java堆 2 ...
- Jemalloc优化MySQL、Nginx/Tengine内存管理
Jemalloc源于Jason Evans 2006年在BSDcan conference发表的论文:<A Scalable Concurrent malloc Implementation f ...
- Android性能优化OOM内存管理——ADJ
前言 OOM_ADJ (Out of Memory Adjustment)是android系统在内存不足情况下进行内存调整的重要参数.在处理app启动速度的时候,可以设置主线程的优先级,保证主线程占用 ...
- mysql myisam 优化,mysql myisam 优化设置 | 很文博客
mysql myisam 优化设置设置,需要的朋友可以参考下. myisam_max_[extra]_sort_file_size足够大 delay_key_write减少io,提高写入性能 bulk ...
- mysql myisam 优化,mysql myisam 优化设置
mysql myisam 优化设置设置,需要的朋友可以参考下. myisam_max_[extra]_sort_file_size足够大 delay_key_write减少io,提高写入性能 bulk ...
- mysql galaxy_优化mysql
一.SQL优化 1.优化SQL一般步骤 1.1 查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; Com_select:执行SELECT操作的次数,一次查询累加1.其他类似 以下 ...
- mysql缓存优化,MySQL优化步骤及my.cnf缓存优化
MySQL优化步骤及my.cnf缓存优化 1.看机器配置,指三大件:cpu.内存.硬盘 2.看mysql配置参数 3.查系mysql行状态,可以用mysqlreport工具来查看 4.查看mysql的 ...
- 性能优化-Bitmap内存管理及优化
Bitmap作为重要Android应用之一,在很多时候如果应用不当,很容易造成内存溢出,那么这篇文章的目的就在于探讨Bitmap的有效运用及其优化 缓存介绍 当多次发送请求的时候,请求同一内容,为了使 ...
最新文章
- Python3中Pillow(PIL)介绍
- yii mysql 操作数据库_Yii数据库操作_MySQL
- Milvus Windows
- 移动端调试 weinre
- coredump 断点_coredump调试的使用
- 2020-11-7(http协议简介)
- 【面试题视频讲解】TreeSet使用示例
- 手写自己的MyBatis框架-SqlSession
- 贪心算法——洛谷(P1106)删数问题
- ip tcp udp mpeg4头结构的定义
- CarMaker入门第二课-创建第一个TestRun
- 应用于arcgis的代码,长期更新…
- JavaScript-WebAPIs学习记录
- 目前医疗大数据面临四大挑战
- pikachu之xss漏洞学习
- 我的XBox手柄怎么有线断连了
- 冬季吃山药能防什么病如何挑选
- G. The Galactic Olympics
- Hologres INSERT ON CONFLICT
- c语言程序与设计教学设计,浅谈C语言程序设计课程的教学设计
热门文章
- PCL库学习笔记(PCL Visualizer)
- 岩棉夹芯板英标BS476-20BS476-22耐火测试
- 解决from tensorflow.contrib.data import Dataset ImportError: cannot import name 'Dataset'
- PDF怎么在手机编辑签名?这个方法感觉掌握下
- avrc语言的头文件和c文件,AVR(ATmega8L)单片机C语言引用头文件问题(新手问题)...
- matlab2018中变压器模块,利用MATLAB中Sim+Power+Systems模库时变压器模型的参数计算及其仿真结果比较...
- jQuery实现的各种前端网页,种类多样
- 豆豆趣事[2012年05月]
- c语言 bnf,BNF
- mac 爱普生打印机驱动_适用于 Mac 的打印机和扫描仪驱动程序