TCMalloc优化Nginx、MySQL、Redis内存管理
与标准的glibc库的malloc相比,TCMalloc在内存的分配效率和速度要高,可以在高并发的情况下很好的控制内存的使用,提高服务器的性能,降低负载。
安装libunwind库:
如果系统是64位的需要先安装libunwind库,32位系统则不需要安装。
libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
tar
xf libunwind-1.1.
tar
.gz
cd
libunwind-1.1
CFLAGS=-fPIC .
/configure
make
CFLAGS=-fPIC
make
CFLAGS=-fPIC
install
gperftools的安装:
1
2
|
tar xzf gperftools-2.1. tar .gz
cd gperftools-2.1
|
可以加入参数只编译tcmalloc(./configure –enable-minimal、–disable-cpu-profiler、–disable-heap-profiler、–disable-heap-checker、–disable-debugalloc),64位操作系统不安装libunwind也不会报错,注意生成的库文件是libtcmalloc_minimal.*
64位操作系统,如下
1
|
. /configure
|
32位系统,不需要安装libunwind,但是一定要添加–enable-frame-pointers参数,如下
1
|
. /configure -- enable -frame-pointers
|
1
|
make && make install
|
编译安装后,输入以下命令:
1
2
|
echo '/usr/local/lib' > /etc/ld .so.conf.d /local .conf
ldconfig |
使用TCMalloc优化Nginx
为了使nginx支持google-perftools,需要在安装过程中添加”–with-google_perftools_module”选项重新编译nginx。安装如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
tar xf nginx-1.4.7. tar .gz
cd nginx-1.4.7
. /configure \
> --user=nginx \ > --group=nginx \ > --prefix= /usr/local/nginx \
> --with-pcre=.. /pcre-8 .33 \
> --with-zlib=.. /zlib-1 .2.8 \
> --with-openssl=.. /openssl-1 .0.0l \
> --with-http_stub_status_module \ > --error-log-path= /var/log/nginx/error .log \
> --http-log-path= /var/log/nginx/access .log \
> --pid-path= /var/run/nginx/nginx .pid \
> --lock-path= /var/lock/nginx .lock \
> --with-http_gzip_static_module \ > --http-proxy-temp-path= /var/tmp/nginx/proxy/ \
> --http-fastcgi-temp-path= /var/tmp/nginx/fcgi/ \
> --http-uwsgi-temp-path= /var/tmp/nginx/uwsgi \
> --http-scgi-temp-path= /var/tmp/nginx/scgi \
> --with-google_perftools_module make && make install
|
为添加线程目录:
1
2
3
4
5
|
mkdir /tmp/tcmalloc
chown -R www.www /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc vi /usr/local/nginx/conf/nginx .conf #pid下一行添加
google_perftools_profiles /tmp/tcmalloc ;
|
重启nginx服务
1
|
/etc/init .d /nginx restart
|
验证tcmalloc是否在Nginx中生效
1
2
|
yum -y install lsof
lsof -n | grep tcmalloc
|
每个线程(work_processes的值)会有一行记录。每个线程文件后面的数字值就是启动的nginx的pid值。
使用TCMalloc优化MySQL
MySQL 5.1静态编译方法,./configure预编译时假设下面参数
1
|
--with-mysqld-ldflags=-ltcmalloc |
MySQL 5.5静态编译方法,cmake预编译时加上下面参数
1
|
-DCMAKE_EXE_LINKER_FLAGS= "-ltcmalloc" -DWITH_SAFEMALLOC=OFF
|
采用动态加载
1
2
|
sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libtcmalloc.so@' /usr/local/mysql/bin/mysqld_safe
service mysqld restart |
验证加载tcmalloc在MySQL中是否生效,如下:
1
|
lsof -n | grep tcmalloc
|
使用TCMalloc优化redis
注意:redis-2.4以上自带jemalloc,你不需要加任何参数,通过zmalloc.c源码中我们可以看到,Redis在编译时,会先判断是否使用tcmalloc,如果是,会用tcmalloc对应的函数替换掉标准的libc中的函数实现。其次会判断jemalloc是否使得,最后如果都没有使用才会用标准的libc中的内存管理函数。所以用tcmalloc优化请谨慎使用,这两着分配器碎片率相差不大,建议用自带jemalloc
1
|
make USE_TCMALLOC= yes FORCE_LIBC_MALLOC= yes /bin/cp src/{redis-benchmark,redis-check-aof,redis-check-dump,redis-cli,redis-sentinel,redis-server} /usr/local/redis/bin
|
相关推荐
如果显示类似下面的信息,即表示支持tcmalloc加速 (nginx八个线程都支持) nginx 31655 www 9w REG 8,1 0 479533 /tmp/tcmalloc/.31655 nginx 31656 www 11w REG 8,1 ...
第7章 使用TCMalloc优化Nginx 第8章 PCRE正则表达式 第9章 Nginx高可用的实现 第10章 10个QA 第2部分 Nginx服务器的功能 第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章...
第7章 使用TCMalloc优化Nginx 第8章 PCRE正则表达式 第9章 Nginx高可用的实现 第10章 10个QA 第2部分 Nginx服务器的功能 第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章...
第7章 使用TCMalloc优化Nginx 第8章 PCRE正则表达式 第9章 Nginx高可用的实现 第10章 10个QA 第2部分 Nginx服务器的功能 第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章...
控制内存增长TCMALLOC
tcmalloc排查内存泄漏的方法
tcmalloc 内存管理及内存泄漏
对tcmalloc算法的更改,支持numa架构,在numa架构下有更好的性能
下面小编就为大家带来一篇浅谈redis采用不同内存分配器tcmalloc和jemalloc。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
gperftools-2.5.tar.gz ,使用Google PerfTools 之 Tcmalloc优化nginx性能
TCMalloc(Thread-Caching Malloc)是google开发的开源工具──...与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发情况下的性能,降低系统负载。
make MALLOC=tcmalloc_minimal 这一步需要root权限 make install PREFIX=/usr/local/redis 修改redis配置文件 ds:create_if_missing 1 //if the specified database didn't exist will create a new one ds:...
项目简介:该项目实现了一个简易的高并发内存池框架,将内存池设计为thread cache、central cache、page cache三层架构,从而实现高效的多线程内存管理。 核心技术:链表、哈希桶、操作系统内存管理、单例模式的设计...
自定义内存池性能优化的原理自定义内存池性能优化的原理自定义内存池性能优化的原理
这篇文章采用层层递进的方式,依次会介绍关于存储的基本知识,Go内存管理的 “前辈” TCMalloc,然后是Go的内存管理和分配,最后是总结。这么做的目的是,希望各位能通过全局的认识和思考,拥有更好的编码思维和架构...
安装tcmalloc所需的源代码,和完整编译安装应用过程。 unzip tcmalloc.zip tar -zxvf gperftools-2.1.tar.gz cd gperftools-2.1 ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-...
vs2003-tcmalloc静态链接库
这个tcmalloc很出名了,是google出的内存管理模块,比传统模块控制更合理,能应付更高的并发,而且也更稳定. 不过这个模块不是系统自带的,没有原生安装,所以需要手动去安装操作,稍微有点麻烦.这个模块包含在google封装...
使用tcmalloc 加速 mysql 和 nginx