TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员。与标准的glibc库的Malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程度上提高了服务器在高并发情况下的性能,从而降低了系统的负载。

1.安装libunwind库
 可以从http://download.savannah.gnu.org/releases/libunwind下载相应的libunwind版本
#wget http://ftp.twaren.net/Unix/NonGNU//libunwind/libunwind-1.1.tar.gz
#tar zxvf libunwind-1.1.tar.gz
#cd libunwind-1.1
#CFLAGS=-fPIC ./configure 
#make CFLAGS=-fPIC 
#make CFLAGS=-fPIC install

2.安装google-perftools
#wget http://gperftools.googlecode.com/files/gperftools-2.1.tar.gz
#tar zxvf gperftools-2.1.tar.gz
#cd gperftools-2.1
# ./configure 
#make && make install 
#echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf 
# ldconfig

3.编译安装nginx

# wget http://nginx.org/download/nginx-1.4.2.tar.gz

# tar -zvxf nginx-1.4.2.tar.gz

# cd ./nginx-1.4.2

注意需要添加--with-google_perftools_module

#./configure --with-google_perftools_module --prefix=/usr/local/nginx

参考:Linux环境Nginx安装与调试(Nginx+PHP/phpfpm)

#make

#make install

4.修改Nginx主配置文件

修改nginx.conf文件,在pid这行的下面添加如下代码:
#pid        logs/nginx.pid; 
google_perftools_profiles /tmp/tcmalloc;

同时我们设置nginx启动2个工作进程

worker_processes  2;
daemon on;
master_process  on;

5.为google-perftools添加线程目录

创建一个线程目录,将文件放在/tmp/tcmalloc下。

#mkdir /tmp/tcmalloc
#chmod 0777 /tmp/tcmalloc

6.启动Nginx

#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

7.验证运行状态
为了验证google-perftools已经正常加载,可通过如下命令查看:
# lsof -n | grep tcmalloc

8.安装redis

Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。所以系统内存分配器的性能及碎片率会对Redis造成一些性能上的影响。

在Redis的 zmalloc.c 源码中,我们可以看到如下代码:

/* Explicitly override malloc/free etc when using tcmalloc. */
#if defined(USE_TCMALLOC)
#define malloc(size) tc_malloc(size)
#define calloc(count,size) tc_calloc(count,size)
#define realloc(ptr,size) tc_realloc(ptr,size)
#define free(ptr) tc_free(ptr)
#elif defined(USE_JEMALLOC)
#define malloc(size) je_malloc(size)
#define calloc(count,size) je_calloc(count,size)
#define realloc(ptr,size) je_realloc(ptr,size)
#define free(ptr) je_free(ptr)
#endif

注意:redis-2.4以上自带jemalloc,你不需要加任何参数,通过zmalloc.c源码中我们可以看到,Redis在编译时,会先判断是否使用tcmalloc,如果是,会用tcmalloc对应的函数替换掉标准的libc中的函数实现。其次会判断jemalloc是否使得,最后如果都没有使用才会用标准的libc中的内存管理函数。所以用tcmalloc优化请谨慎使用,这两着分配器碎片率相差不大,建议用自带jemalloc。

如果要安装tcmalloc可以这样:

注意需要删除原先的redis的解压文件,不然安装无效!

# make USE_TCMALLOC=yes

# make install

检测tcmall信息

使用info命令查看内存信息:

更多参考:

使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能[张宴原创]

轻量级HTTP服务器Nginx(Nginx性能优化技巧)

TCMalloc:线程缓存的Malloc

TCMalloc优化MySQL、Nginx、Redis内存管理

2012年tcmalloc学习笔记之一

利用TCMalloc替换Nginx和Redis默认glibc库的malloc内存分配相关推荐

  1. linux c语言 glibc 错误 munmap,Linux内存分配小结--malloc、brk、mmap

    Linux的虚拟内存管理有几个关键概念: 1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址: 2.虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟空间地址)与物理地址进行 ...

  2. redis笔记_源码_内存分配

    文件:zmoalloc.h zmoalloc.c 1.求两个整数的余数 eg: 求_n对sizeof(long)的余数(_n&(sizeof(long)-1)), 性能提升为50%-100% ...

  3. 利用nginx+lua+redis实现反向代理方法教程

    这篇文章主要给大家介绍了利用nginx+lua+redis实现反向代理方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近因为工作需要,要进行IVR的 ...

  4. 详细总结:分布式, Nginx Linux Redis 微服务 Dubbo框架 Quartz定时任务

    目录 1.1 概念 2.1分布式概念 2.2分布式项目拆分 2.3分布式项目总结 2.3 分布式事务 3.1 Nginx配置文件介绍 3.2 实现负载均衡(Tomcat高可用) 3.3 常见面试题 4 ...

  5. [转]Docker部署Django由浅入深系列(下): 八步部署Django+Uwsgi+Nginx+MySQL+Redis

    在上篇教程中,我们手动构建了两个容器,一个容器放Django + Uwsgi,另一个容器放Nginx,成功部署了一个简单的Django项目.然而在实际的生产环境中,我们往往需要定义数量庞大的 dock ...

  6. nginx+lua+redis实现降级

    前言 商城或web站点的用户访问量出乎意料地增加了很多,超出了系统的负载能力, 系统有些扛不住,继而导致注 册,下单,支付什么的全部在绕圈卡住,继而导致公司业务损失了不少用户和订单.. 一.引子 面对 ...

  7. MySQL与Redis数据库结合——redis作为mysql的缓存服务器,实现读写分离(nginx+php+redis+mysql)

    文章目录 一.读写分离的背景 二.搭建nginx+php+redis+mysql 实验环境 实验 1.在server1上安装nginx+php 建立php和redis,mysql的连接 2.在serv ...

  8. 爬虫实战(一)—利用requests、mongo、redis代理池爬取英雄联盟opgg实时英雄数据

    概述 可关注微信订阅号 loak 查看实际效果. 代码已托管github,地址为:https://github.com/luozhengszj/LOLGokSpider 包括了项目的所有代码. 此篇文 ...

  9. Linux安装Nginx、Redis、django

    部署Nginx 部署Redis 安装Redis redis事物 服务器管理命令 慢查询日志 主从复制 Redis-Sentinel cluser分片集群 安装python 操作redis数据 部署Dj ...

最新文章

  1. R语言ggplot2可视化更改轴上数字的格式(显示格式)实战
  2. SQL Cookbook:一、检索记录(1)从表中检索所有行和列
  3. Elementui icon图标不显示
  4. 349. Intersection of Two Arrays 两个数组的交集
  5. python生成四位随机数
  6. jenkins上linux-gradle机器对android执行shell签名apk
  7. 餐饮水单打印软件_开发一款餐饮手机app系统软件什么价格?有哪些方面需要考虑?...
  8. spring技术内幕——深入解析spring架构与设计原理
  9. CRT的完整形式是什么?
  10. 如何升软件开发项目的利润
  11. java安装选择哪个可选功能_java章节习题及期末考试题答案.doc
  12. python3 数据结构_python系列十一:python3数据结构
  13. Spring系列之静态代理、动态代理、cglib代理与Spring AOP的处理
  14. Android 自定义相机Demo源码
  15. scrapy配置user-agent中间件和ip代理中间件
  16. 各种文件后缀名对应content-type
  17. 【流媒体】ffmpeg小结
  18. Windows恢复回收站误删文件
  19. 永辉超市第三季营收222亿:净亏7.8亿 卖金龙鱼股权套现1.7亿
  20. 魔力修改服务器经验,魔力宝贝服务端修改地图怪物等级方法

热门文章

  1. SpringBoot配置postgre多数据源(亲测有效!!!)
  2. 2018年摩拜校招嵌入式工程师笔试卷
  3. 【机器学习入门】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集
  4. Linux的ntp服务起不来,CentOS7/Red Hat7 NTP服务无法开机自启动
  5. vs2012与win7不兼容问题
  6. hive性能调优实战pdf_Nginx 性能调优实战
  7. C++随时输出到文件-outfile
  8. 如何安装蓝湖插件支持Photoshop CC 2017
  9. BitCask 持久化hash存储引擎 原理介绍
  10. TCP/IP 协议栈4层结构及3次握手4次挥手