$7.49 .com domain with free InstantPage Website Builder$1.99 Web Hosting   捷飞网络官方淘宝店   Godaddy 优惠码
返回列表 发帖
分享到:




[应用&技术] 如何提高MySQL在高并发情况下的性能之使用Google的开源TCMalloc库

  TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发情况下的性能,降低系统负载。
3 l; a1 ~4 X4 o0 i/ X1 f- @8 ]) s
  TCMalloc的实现原理和测试报告请见一篇文章:《TCMalloc:线程缓存的Malloc6 y, K" [- K) q* ?0 P2 P: s
( v( Q$ E% [' @) N( x
  为MySQL添加TCMalloc库的安装步骤(Linux环境):
5 d7 n$ f' }* {; P/ G
% `* x" S7 g* X0 w$ J  1、64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
! F. K$ S& j/ F9 y  A7 Hwget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz  K3 R' F8 x) I5 q' R3 }. x" Q3 @
tar zxvf libunwind-0.99-alpha.tar.gz
; ?. s6 m: H% ^cd libunwind-0.99-alpha/
, P. Y$ N- w( ^( n1 C0 E- uCFLAGS=-fPIC ./configure' s: }" s9 ]& ?4 a! U" G5 l: B2 o
make CFLAGS=-fPIC3 S0 b8 g3 \) K1 a' E
make CFLAGS=-fPIC install" {( l, B* Z2 D/ l6 w* X  p8 [! M
6 d, e7 H+ a% U  A& L

4 o8 R" g' M5 O: k1 D; x  2、安装google-perftools:* X- M& l0 Z# q( i$ Z0 f$ {
wget http://google-perftools.googlecode.com/files/google-perftools-0.97.tar.gz- P) L) H4 E0 m: Q( Q3 R# X" X, D
tar zxvf google-perftools-0.97.tar.gz$ Z7 e! [6 y1 M0 u# K: l8 m
cd google-perftools-0.97// g, a' }. r+ X: N% S
./configure
3 {. h* G+ u! |  emake && make install1 d8 s& C6 L1 z$ L9 h% o4 s" {
3 y6 \$ U6 ?$ `1 r8 F- j
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
4 m8 c+ `8 b! L  k/sbin/ldconfig7 @5 e* Q: F" ]2 M/ D& u- A; l7 j
5 W  i; a% I' {

* u$ x5 N# G7 P  3、修改MySQL启动脚本(根据你的MySQL安装位置而定):
2 `7 Z: M$ v( I& t6 _: Y+ E4 `vi /usr/local/mysql/bin/mysqld_safe9 x& z. b  {+ D8 K( e" \: z
6 P# ]/ _5 |) u
  在# executing mysqld_safe的下一行,加上: 引用
  V, I9 F% U! V- |2 n6 X% Nexport LD_PRELOAD=/usr/local/lib/libtcmalloc.so; z7 ?8 ]  U) C; [
, A0 K& L$ e; e* J5 U' U% ]

0 H! V, V8 V% e3 h+ u& |; n! I" P  保存后退出,然后重启MySQL服务器。5 c2 b4 y" w7 |7 y$ J0 C
9 T1 ?9 c/ v3 o2 G& T. V% K

: t7 h; j' U. \  4、使用lsof命令查看tcmalloc是否起效:. R' y- D0 K: I+ I' g7 ~
/usr/sbin/lsof -n | grep tcmalloc
/ O& K. \8 j* V2 ~5 O" g
5 S3 E+ |" S1 J( g* G  如果发现以下信息,说明tcmalloc已经起效:# p5 Q- |6 I% n+ a/ U4 O+ |  \; g
  mysqld    10847   mysql  mem       REG        8,5  1203756   20484960 /usr/local/lib/libtcmalloc.so.0.0.0   - l$ l' X) h( f

! H: M8 u6 b: H) |' c3 T( e
/ ^) ^4 q( i/ s* j7 J# C
  注:2008年6月2日,修正了libunwind在x86_64位操作系统下的编译错误,TCMalloc无法加载等问题。4 |7 G) k* L4 ]7 q0 W
8 s: b1 @# Z' B  D2 ^2 i
  涉及修改内容:( l7 B! T4 y/ _6 |  p
  1、libunwind的编译参数改为:. e/ v5 X9 P+ u0 Z0 ?* i0 b! Q; C
  CFLAGS=-fPIC ./configure. Q/ R; c. M( Q0 k
  make CFLAGS=-fPIC1 q+ q* D8 }8 R1 a( \9 m
  make CFLAGS=-fPIC install
; m2 c' o' z4 ^  `$ I+ i2 E$ S
  z+ M, E! n) ~8 R  2、增加:
( y  m3 S; G3 Y  T" X" Z  echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf3 s! a9 ^- J7 C- b0 Q
  /sbin/ldconfig
) h1 n3 C0 [0 |( l7 D% d8 H$ Z8 y2 ^4 S
  3、修改MySQL加载TCMalloc的语句:
* v3 u) P) f: q; i9 J. S  export LD_PRELOAD=/usr/local/lib/libtcmalloc.so- H* P9 N) c) r% x& N
: \7 m8 b3 m. p: |% P
  感谢网友router。! C- z) a1 p- Y6 w
! G, ~! q3 w0 b5 F( w, ]9 ^7 v

# p2 F6 U) i; Q. u% b参考: http://blog.s135.com/read.php?349




返回列表
Namecheap
Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting
互联网安全