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是一种高性能的内存管理库,它可以帮助开发者检测和解决内存泄漏问题。在本文中,我们将介绍如何使用tcmalloc来排查内存泄漏的方法。 安装gperftools 首先,我们需要安装gperftools这个工具包,可以使用...
在讨论基于NUMA架构的TCMalloc内存管理算法之前,我们先来深入了解NUMA架构和TCMalloc算法的概念及其在内存管理中的作用。 NUMA(Non-Uniform Memory Access)架构是一种多处理器架构,其中每个处理器(CPU)有其...
本项目为基于C++语言的TCMalloc内存优化模块的设计...TCMalloc(google-perftools)旨在优化多线程C++应用的内存分配,相比glibc 2.3的malloc具有更高的性能,特别适用于MySQL等数据库在高并发环境下的内存稳定性需求。
tcmalloc通过精细化的内存管理策略,如线程本地缓存和小对象优化,提高了多线程环境下的内存分配效率。它还提供`tc_malloc_size()`函数来获取内存块的实际大小,这对于了解Redis内存使用情况非常有用。 jemalloc则...
如果显示类似下面的信息,即表示支持tcmalloc加速 (nginx八个线程都支持) nginx 31655 www 9w REG 8,1 0 479533 /tmp/tcmalloc/.31655 nginx 31656 www 11w REG 8,1 ...
TCMalloc作为一种高性能的内存分配库,通过对传统malloc函数的改进,实现了高效的内存管理。通过合理地配置和使用TCMalloc,可以显著提高应用程序的性能,尤其是在多线程环境下。随着软件系统的日益复杂化,TCMalloc...
第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章...
与传统的glibc库中的malloc相比,TCMalloc在内存管理和分配方面表现出显著的优越性,特别是在处理高并发场景时,能够极大地提升MySQL服务器的性能,有效降低系统负载。 TCMalloc的核心设计理念是利用线程本地存储...
4. mem_allocator:Redis 使用的内存分配器,在编译时指定,可以是 libc 、jemalloc 或者 tcmalloc,默认是 jemalloc。 Redis 的内存占用可以划分为以下几个部分: 1. 数据作为数据库,数据是最主要的部分;这部分...
总结来说,Tcmalloc-v2.10是gperftools库中的一个关键组件,它通过优化内存分配策略,为多线程应用提供高效且低开销的内存管理方案。同时,其集成的内存泄漏检测工具和性能分析工具,对于开发者优化代码和排查问题...
在管理和优化 Redis 实例时,了解内存使用情况至关重要。本文主要讲解如何使用 Redis 的 `info` 命令来查看内存信息。 首先,我们关注 `info memory` 命令。通过在 Redis 客户端(如 `redis-cli`)执行 `info ...
在描述中提到,google-perftools不仅可以优化Nginx,还可以应用于MySQL的内存管理优化。在处理大量并发连接时,数据库性能的提升同样至关重要。通过改善内存管理,可以减少数据库查询延迟,提高吞吐量。 以下是使用...
在现代的高性能Web服务中,如MySQL数据库服务器和Nginx反向代理服务器,内存管理和异常处理是至关重要的性能优化环节。libunwind库和tcmalloc(也称为Google Perftools的内存分配器)在这一领域扮演了重要角色。本文...
4. 使用jemalloc或tcmalloc内存分配器,提升内存管理效率。 八、Redis安全 确保设置合适的访问权限,启用`requirepass`,限制客户端的连接源,并定期更新软件以修复安全漏洞。 总结,Redis 64位Windows版本为...
5. **智能内存管理库**:利用如jemalloc、tcmalloc等高效的内存管理库,它们在设计时就考虑了碎片问题,能够优化内存分配过程。 总的来说,内存碎片是一个复杂的问题,需要从系统设计、内存管理策略和编程实践中...