静态编译TCMalloc到MySQL

日期: 2010-10-31 作者:P.Linux 来源:TechTarget中国 英文

  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

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

P.Linux
P.Linux

相关推荐