- 帖子
- 1008
- 主题
- 761
- 精华
- 0
- 积分
- 1794
- 贡献
- 941
- 激情
- 7771
- 阅读权限
- 100
- 最后登录
- 2020-4-28
|
[应用&技术] 如何提高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:线程缓存的Malloc》6 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 |
|