当前位置:首页 > 框架开发 > 使用TCMalloc优化Nginx和mysql增强服务器高并发负载能力

使用TCMalloc优化Nginx和mysql增强服务器高并发负载能力

snuday14年前 (2012-11-02)框架开发34139

使用TCMalloc优化Nginx和mysql增强服务器高并发负载能力

TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发情况下的性能,降低系统负载。

1、什么是TCMalloc?

TCMalloc意思是线程缓存的malloc。TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高服务器在高并发情况下的性能,降低系统负载。

2、TCMalloc安装

为MySQL添加TCMalloc库的安装步骤(Linux环境):

1、64位操作系统请先安装 libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。

01
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
02

03
tar zxvf libunwind-0.99-alpha.tar.gz
04

05
cd libunwind-0.99-alpha/
06

07
CFLAGS=-fPIC ./configure
08

09
make CFLAGS=-fPIC
10

11
make CFLAGS=-fPIC install
2、安装google-perftools:

01
wget http://google-perftools.googlecode.com/files/google-perftools-0.97.tar.gz
02

03
tar zxvf google-perftools-0.97.tar.gz
04

05
cd google-perftools-0.97/
06

07
./configure
08

09
make && make install
10

11
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
12

13
/sbin/ldconfig

注意:如果是64位系统,编译参数改为:./configure –enable-frame-pointers

3、设置并更新动态连接库

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr-local-lib.conf

ldconfig

4、 MYSQL 和NGINX 编译配置

Nginx编译配置

./configure –with-http_stub_status_module –with-google_perftools_module 其他的也可以自己添加嘛。

新建目录:/tmp/tcmalloc,赋予755权限。

google_perftools_profiles /tmp/tcmalloc; 在nginx 主配置nginx.conf worker_rlimit_nofile 添加此行

重点在mysql的编译问题:

mysql编译可能加载不上TCMalloc,

1)、一种方法:直接编译TCMalloc进mysql

./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-assembler --with-mysqld-ldflags=-all-static --with-mysqld-ldflags=-ltcmalloc --with-charset=utf8 --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile

2)、第二方法:去掉静态编译参数,

--with-mysqld-ldflags=-all-static ,在相关文件中添加TCMalloc加载项

./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-assembler --with-charset=utf8 --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile

然后:

sudo vi /usr/local/web/mysql/bin/mysqld_safe

#在:# executing mysqld_safe下加入以下

export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

最后重启下Nginx和Mysql

lsof -n | grep tcmalloc

如果显示以下说明OK,

root@wehefei:/home/jincon/lnmp1.0.2/nginx-1.0.15# lsof | grep tcmalloc

mysqld 20047 mysql mem REG 104,17 1902881 9048380 /usr/local/lib/libtcmalloc.so.0.2.2

nginx 23726 www 9w REG 104,17 0 14418049 /tmp/tcmalloc.23726

nginx 23727 www 11w REG 104,17 0 14418050 /tmp/tcmalloc.23727

nginx 23728 www 13w REG 104,17 0 14418052 /tmp/tcmalloc.23728

nginx 23729 www 15w REG 104,17 0 14418051 /tmp/tcmalloc.23729

包子的Nginx开启了四个进程,注意下。


相关文章

突破织梦description字数限制_首页调用文章简介

1.进phpmyadmin 查看dede_archives 表,默认的是description varchar(255)把它改为description varchar(600)2.打开文件 dede/...

易企CMSbug修复,图片无法上传,上传后无法修改....

先来解决下图片无法上传的问题吧,去过官方论坛~~晕 他们始终说没有错误,任凭会员怎么提还是没有解决方案,没办法只好自己找找错误点在什么地方了:先打开:\tiny_mce\plugins\Ybrowse...

JavaScript函数以及基础写法精华收录

1.document.write("");为 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->(head,body)4.一个...

php+memcached 实现session共享

php本身的session机制不能跨机,这个多服务器,或者多子域名的开发带来了麻烦。通过万能的GOOGLE知道目前大概有这么几种方案解决1)使用数据库来实现2)自己写server端,通过改写sessi...

webbench并发数压力测试工具,搭配nginx理想实验结果

webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。1、适用系统:Linux2、编译安装:引用wget \downlo...

Varnish+nginx+php(FastCGI)+MYSQL5+MenCache+MenCachedb构建大流量服务器集群

Varnish+nginx+php(FastCGI)+MYSQL5+MenCache+MenCachedb构建大流量服务器集群

架构 Varnish+nginx+php(FastCGI)+MYSQL5+MenCache+MenCachedb说明:我在设计系统架构时,进行了大胆的尝试,只用6台Web服务器,达到了可承受4000万...