使用TCMalloc优化高并发下的MySQL性能

时间: 2009-04-26 / 分类: 技术相关 / 浏览次数: 1,495 views / 0个评论 发表评论

[文章作者:叶歆昊   最后修改:2010-07-19   转载请注明原文链接:http://littz.com/optimal-use-of-tcmalloc-mysql-performance-under-high-concurrency.html]

目前学生之家服务器使用Linux系统(CentOS发行版),Nginx、PHP(FastCGI)、MySQL。硬件环境是HP ML350 G3,1G内存。但是PHP程序方面没做多少缓存,PHP程序大多连接MySQL数据库获取数据,程序执行效率依赖MySQL性能,但是MySQL在几百的并发下就容易出问题。

看到张宴博文,Google的一些开源软件相当好,实测用TCmalloc提升MySQL性能很好很强大!

学生之家服务器上跑一个简单的PHP程序,查询几千行的MySQL获取数据,然后对数据按网页需求输出。结果每分钟能负载20092次页面请求,每秒有300多,内存和cpu占用率都不高。

webbench -c 500 -t 30 http://www.studenthome.cn/vote/index.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software
Benchmarking: GET http://www.studenthome.cn/vote/index.php
500 clients, running 30 sec.
Speed=20092 pages/min, 3470802 bytes/sec.
Requests: 10046 susceed, 0 failed.

使用google的tcmalloc 内存分配函数代替libc里的标准malloc.

google的开源性能优化工具包 perftool 被证明对提高应用程序性能确有帮助. tcmalloc是其中一个, 与标准的malloc相比, 在内存的分配上效率很高; 编译mysql时建议使用tcmalloc库–

简单来说, 只要在./configure 后生成的Makefile里改一下, 在连接库的那行最后面加上 -ltcmalloc即可.

如果已经使用的是已编译的binary,或者只想简单测试一下tcmalloc的效果, 可以用LD_PRELOAD环境变量制定运行时使用tcmalloc库; 例如在mysqld_safe里加入(用vi编辑器)

vi /usr/local/webserver/mysql/bin/mysqld_safe  #export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

确定程序是否使用tcmalloc库可以用lsof命令:

/usr/sbin/lsof -n | grep tcmalloc

发现如下信息表示正在tcmalloc对本机mysql有效

/usr/sbin/lsof -n | grep tcmalloc
mysqld 1975 mysql mem REG 104,7 1472039 3926419 /usr/local/lib/libtcmalloc.so.0.0.0

发表评论

您的昵称 *

您的邮箱 * (绝对保密)

您的网站