Linux下的malloc函数性能问题,想必大部分在Linux下写C的人都深有感受,纷纷利用内存池来改进内存分配效率。
Google开源的tcmalloc则改进了malloc的一些效率问题,在大量malloc和free时,操作系统的内存曲线明显比Linux下malloc函数要平稳,在大并发情况下,提升程序稳定性和性能。
一般网上都是把tcmalloc动态库加到mysqld_safe中启动,但是我们的MySQL都是静态编译的,这时候动态加载是否生效呢?所以还是静态编译入MySQL好。
编译tcmalloc先要编译libunwind:
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz tar zxvf libunwind-0.99.tar.gz CHOST=”x86_64-pc-linux-gnu” CFLAGS=” -O3 -fPIC -fomit-frame-pointer -pipe -march=nocona -mfpmath=sse -m128bit-long-double -mmmx -msse -msse2 -maccumulate-outgoing-args -m64 -ftree-loop-linear -fprefetch-loop-arrays -freg-struct-return -fgcse-sm -fgcse-las -frename-registers -fforce-addr -fivopts -ftree-vectorize -ftracer -frename-registers -minline-all-stringops -fbranch-target-load-optimize2″ CXXFLAGS=”${CFLAGS}” ./configure && make && make install |
然后编译tcmalloc:
tar zxvf google-perftools-1.6.tar.gz CHOST=”x86_64-pc-linux-gnu” CFLAGS=” -O3 -fomit-frame-pointer -pipe -march=nocona -mfpmath=sse -m128bit-long-double -mmmx -msse -msse2 -maccumulate-outgoing-args -m64 -ftree-loop-linear -fprefetch-loop-arrays -freg-struct-return -fgcse-sm -fgcse-las -frename-registers -fforce-addr -fivopts -ftree-vectorize -ftracer -frename-registers -minline-all-stringops -fbranch-target-load-optimize2″ CXXFLAGS=”${CFLAGS}” ./configure && make && make install |
记得要把libtammloc加入系统路径,否则编译MySQL时找不到:
echo “/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
最后就是编译MySQL了:
CXX=gcc CHOST=”x86_64-pc-linux-gnu” CFLAGS=” -O3 -fomit-frame-pointer -pipe -march=nocona -mfpmath=sse -m128bit-long-double -mmmx -msse -msse2 -maccumulate-outgoing-args -m64 -ftree-loop-linear -fprefetch-loop-arrays -freg-struct-return -fgcse-sm -fgcse-las -frename-registers -fforce-addr -fivopts -ftree-vectorize -ftracer -frename-registers -minline-all-stringops -felide-constructors -fno-exceptions -fno-rtti -fbranch-target-load-optimize2″ CXXFLAGS=”${CFLAGS}” ./configure –prefix=/usr/alibaba/install/mysql-ent-custom-5.1.49sp1 –with-server-suffix=-alibaba-edition –with-mysqld-user=mysql –with-plugins=partition,blackhole,csv,heap,innobase,myisam,myisammrg –with-charset=utf8 –with-collation=utf8_general_ci –with-extra-charsets=gbk,gb2312,utf8,ascii –with-big-tables –with-fast-mutexes –with-zlib-dir=bundled –enable-assembler –enable-profiling –enable-local-infile –enable-thread-safe-client –with-readline –with-pthread –with-embedded-server –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static –with-mysqld-ldflags=-ltcmalloc –without-query-cache –without-geometry –without-debug –without-ndb-debug make && make install |
经过试用,大并发下内存分配和释放曲线都比Linux原生的平稳。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。
-
2017年5月数据库流行度排行榜 MySQL与Oracle“势均力敌”
数据库知识网站DB-engines.com最近更新了2017年5月的数据库流行榜单。TechTarget继续与您一起分享最新的榜单情况。
-
2017年3月数据库流行度排行榜 Oracle卫冕之路困难重重
时隔一个月,数据库市场经过一轮“洗牌”,旧的市场格局是否会被打破,曾经占巨大市场份额的企业是否可能失去优势?
-
从Linux上的SQL Server看微软未来计划
在微软的大部分历史中,Windows一直是其旗舰产品,该公司已经试图通过开发几乎专门为Windows开发的软件来防止客户采用竞争的操作系统。