TCMalloc(Thread-Caching Malloc)与标准glibc库的malloc实现一样的功能,但是TCMalloc在效率和速度效率都比标准malloc高很多。TCMalloc是 google-perftools工具中的一个(gperftools四个工具分别是:TCMalloc、heap-checker、heap- profiler和cpu-profiler),这个工具是开源的,以源码形式发布。如果觉得自己维护一个内存分配器麻烦的话,可以考虑将 TCMalloc静态库连接到你的程序中。使用的时候和glibc中的malloc调用方式一模一样。你需要做的只是把TCMalloc的动态库或者静态 库连接进你的程序中,你就可以获得一个高效,快速,安全的内存分配器。
与标准的glibc库的malloc相比,TCMalloc在内存的分配效率和速度要高,可以在高并发的情况下很好的控制内存的使用,提高服务器的性能,降低负载。TCMalloc的实现原理和测试报告请见一篇文章:《 TCMalloc:线程缓存的Malloc》
tcmalloc作为可选项已经添加到《 lnmp最新源码一键安装包》
安装libunwind库:
如果系统是64位的需要先安装libunwind库,32位系统则不需要安装。
libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz tar zxf libunwind-1.1.tar.gz cd libunwind-1.1 CFLAGS=-fPIC ./configure make CFLAGS=-fPIC make CFLAGS=-fPIC install cd ../
gperftools的安装:
wget http://gperftools.googlecode.com/files/gperftools-2.1.tar.gz 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位操作系统,如下
./configure
32位系统,不需要安装libunwind,但是一定要添加–enable-frame-pointers参数,如下
./configure --enable-frame-pointers
make && make install
编译安装后,输入以下命令:
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf ldconfig #必须执行
使用TCMalloc优化MySQL
MySQL 5.1静态编译方法,./configure预编译时假设下面参数
--with-mysqld-ldflags=-ltcmalloc
MySQL 5.5 静态编译方法 ,cmake预编译时加上下面参数
-DCMAKE_EXE_LINKER_FLAGS="-ltcmalloc" -DWITH_SAFEMALLOC=OFF
采用动态加载
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中是否生效,如下:
lsof -n | grep tcmalloc
使用TCMalloc优化Nginx
为了使nginx支持google-perftools,需要在安装过程中添加"--with-google_perftools_module"选项重新编译nginx。安装如下:
cd lnmp/src/nginx-1.4.2 make clean ./configure --prefix=/usr/local/nginx --user=www --group=www \ --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module \ --with-http_gzip_static_module --with-google_perftools_module make && make install
为添加线程目录:
mkdir /tmp/tcmalloc chown -R www.www /tmp/tcmalloc vi /usr/local/nginx/conf/nginx.conf #pid下一行添加 google_perftools_profiles /tmp/tcmalloc;
验证tcmalloc是否在Nginx中生效
lsof -n | grep tcmalloc
每个线程(work_processes的值)会有一行记录。每个线程文件后面的数字值就是启动的nginx的pid值。
使用TCMalloc优 化redis
注意:redis-2.4以上自带jemalloc ,你不需要加任何参数, 通过zmalloc.c源码中我们可以看到,Redis在编译时,会先判断是否使用tcmalloc,如果是,会用tcmalloc对应的函数替换掉标准 的libc中的函数实现。其次会判断jemalloc是否使得,最后如果都没有使用才会用标准的libc中的内存管理函数。所以用tcmalloc优化请 谨慎使用,这两着分配器碎片率相差不大,建议用自带jemalloc
cd lnmp/src/redis-2.6.16 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 ...
tcmalloc是一种高性能的内存管理库,它可以帮助开发者检测和解决内存泄漏问题。在本文中,我们将介绍如何使用tcmalloc来排查内存泄漏的方法。 安装gperftools 首先,我们需要安装gperftools这个工具包,可以使用...
由于内存管理对于性能至关重要,Redis提供了选择不同的内存分配器,如tcmalloc和jemalloc,来优化内存分配和管理,从而提高整体性能。这两种内存分配器都是为了解决标准C库中的内存管理问题,特别是减少内存碎片和...
在现代的高性能Web服务中,如MySQL数据库服务器和Nginx反向代理服务器,内存管理和异常处理是至关重要的性能优化环节。libunwind库和tcmalloc(也称为Google Perftools的内存分配器)在这一领域扮演了重要角色。本文...
4. mem_allocator:Redis 使用的内存分配器,在编译时指定,可以是 libc 、jemalloc 或者 tcmalloc,默认是 jemalloc。 Redis 的内存占用可以划分为以下几个部分: 1. 数据作为数据库,数据是最主要的部分;这部分...
控制内存增长TCMALLOC
总结来说,Tcmalloc-v2.10是gperftools库中的一个关键组件,它通过优化内存分配策略,为多线程应用提供高效且低开销的内存管理方案。同时,其集成的内存泄漏检测工具和性能分析工具,对于开发者优化代码和排查问题...
jemalloc的优化不仅限于MySQL和Nginx,它可以用于任何依赖于高效内存管理的软件,提高系统的整体性能。然而,值得注意的是,虽然jemalloc通常能带来性能提升,但在特定的工作负载或硬件配置下,可能并不总是最优选择...
4. 使用jemalloc或tcmalloc内存分配器,提升内存管理效率。 八、Redis安全 确保设置合适的访问权限,启用`requirepass`,限制客户端的连接源,并定期更新软件以修复安全漏洞。 总结,Redis 64位Windows版本为...
对tcmalloc算法的更改,支持numa架构,在numa架构下有更好的性能
5. **智能内存管理库**:利用如jemalloc、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章...
总的来说,VS2003-Tcmalloc静态链接库提供了一种在VS2003环境下优化内存管理的方法,特别适合需要高性能内存分配的多线程应用。正确理解和使用Tcmalloc,可以显著提升软件的运行效率,同时,也需要根据实际需求权衡...
- 使用jemalloc或tcmalloc作为内存分配器,提升内存管理效率。 5. **监控与维护**: - 使用`INFO`命令获取服务器状态信息,监控CPU、内存、客户端连接等指标。 - 定期进行RDB或AOF备份,以备恢复数据。 - 监控...
tcmalloc通过优化内存分配过程,减少了锁的竞争,提升了大规模并发应用的性能。在这个压缩包中,包含的是已经编译好的lib和dll文件,分别对应于动态链接库和静态库两种编译形式。 **动态链接库(DLL)与静态库(LIB...
总的来说,编译安装tcmalloc是一项涉及Linux系统、内存管理和C++程序优化的任务,它能提升应用程序的性能,并帮助开发者更好地理解和调试内存相关的问题。在这个过程中,熟悉Linux命令行操作、理解编译配置选项以及...
在描述中提到,google-perftools不仅可以优化Nginx,还可以应用于MySQL的内存管理优化。在处理大量并发连接时,数据库性能的提升同样至关重要。通过改善内存管理,可以减少数据库查询延迟,提高吞吐量。 以下是使用...