From: http://www.linuxidc.com/Linux/2013-04/83197.html

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

要安装TCMalloc库,需要安装libunwind 和 gperftools两个软件包,libunwind库为基于64为CPU何操作系统的程序提供了基本函数调用链和函数调用寄存器功能,32位操作系统部需要安装。

1.安装libunwind库

可以从LinuxIDC.com的FTP下载libunwind-1.1.tar.gz

libunwind-1.1.tar.gz下载地址:

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2013年资料/4月/21日/利用TCMalloc优化Nginx的性能

------------------------------------------------------------------------------

安装过程如下:

tar -xvf libunwind-1.1.tar.gz

cd libunwind-1.1

CFLAGS=-fPIC ./configure

make CFLAGS=-fPIC

make CFLAGS=-fPIC install

fPIC告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

2.安装gperftools 可以从 这里 下载2.0版本

tar -xvf gperftools-2.0.tar.gz

cd gperftools-2.0

./configure

make && make install

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

ldconfig

支持gperftools安装完成

(by chng: because the only thing we need to do is adding the /lib/ path into configuration, without downloading the src (since GFW you know that...), just yum/apt-get/zypper install google-perftools (and maybe libgoogle-perftools-dev) is OK. )

3.重新编译Nginx.

./configure --prefix=/usr/local/nginx \  指定nginx的安装目录

--with-http_stub_status_module \  启用nginx的status功能,可以监控nginx当前状态

--with-http_gzip_static_module \  支持在线实时压缩输出数据流

--with-google_perftools_module \  支持TCMalloc对Nginx性能的优化

make && make install

到这里Nginx安装完成。

4.为gperftools添加线程目录

创建一个线程目录,这里讲文件放在/tmp/tcmalloc下。操作如下:

mkdir /tmp/tcmalloc

chmod 0777 /tmp/tcmalloc

5.修改nginx主配置文件,在pid这行的下面添加如下代码:

#pid  logs/nginx.pid;

google_perftools_profiles /tmp/tcmalloc;

接着重启nginx即可完成gperftools的加载。

6.验证运行状态

为了验证gperft

#pid  logs/nginx.pid;

google_perftools_profiles /tmp/tcmalloc;

(by chng:pay attention that it is '_' instead of '-'.

see src/misc/ngx_google_perftools_module.c line 30-40:

 static ngx_command_t  ngx_google_perftools_commands[] = {

      { ngx_string("google_perftools_profiles"),
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
ngx_conf_set_str_slot,
,
offsetof(ngx_google_perftools_conf_t, profiles),
NULL }, ngx_null_command
};

)

接着重启nginx即可完成gperftools的加载。

ools已经正常加载,可以通过如下命令查看:

lsof -n | grep tcmalloc

nginx    2395 nobody    9w REG    8,8    0    1599440 /tmp/tcmalloc.2395

nginx    2396 nobody    11w REG    8,8    0    1599443 /tmp/tcmalloc.2396

nginx    2397 nobody    13w REG    8,8    0    1599441 /tmp/tcmalloc.2397

nginx    2398 nobody    15w REG    8,8    0    1599442 /tmp/tcmalloc.2398

由于在Nginx配置文件中设置worker_processes的值为4 ,因此开启了4个Nginx线程,每个线程都会有一行记录。每个线程文件后面的数字值就是启动Nginx的pid值。

至此,利用TCMalloc优化Nginx的操作完成。

下面还有对Nginx内核参数的优化。也来给大家分享下。见 http://www.linuxidc.com/Linux/2013-04/83198.htm

【转】利用TCMalloc优化Nginx的性能的更多相关文章

  1. 利用 TCMalloc 优化 Nginx 的性能

    TCMalloc 全称为 Thread-Caching Malloc,是谷歌的开源工具 google-perftools 的成员,它可以 在内存分配效率和速度上高很多,可以很大程度提高服务器在高并发情 ...

  2. TCMalloc优化MySQL、Nginx内存管理

    TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员. 与标准的glibc库的Malloc相比,TCMalloc库在内存 ...

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

    TCMalloc(Thread-Caching Malloc)与标准glibc库的malloc实现一样的功能,但是TCMalloc在效率和速度效率都比标准malloc高很多.TCMalloc是 goo ...

  4. Nginx的性能优化方案

    nginx的优化 . gzip压缩优化 . expires缓存有还 . 网络IO事件模型优化 . 隐藏软件名称和版本号 . 防盗链优化 . 禁止恶意域名解析 . 禁止通过IP地址访问网站 . HTTP ...

  5. tcMalloc 配置和优化 nginx 高性能

    tcMalloc优化nginx  记住:nginx一定要先启动 1>下载安装libunwind: #wget  http://download.savannah.gnu.org/releases ...

  6. 利用(Tcmalloc) google-perftools优化Nginx和MySQL性能

    一.安装libunwind wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz 本地下载:htt ...

  7. 利用 gperftools 对nginx mysql 内存管理 性能优化

    利用 gperftools 对nginx 与 mysql  进行 内存管理  性能优化 降低负载. Gperftools 是由谷歌开发.官方对gperftools 的介绍为: These tools ...

  8. 根据参数优化nginx的服务性能

    一.优化nginx服务的worker进程数 在高并发.高访问量的Web服务场景,需要事先启动好更多的nginx进程,以保证快速响应并处理大量并发用户的请求. 1).优化nginx进程对应的配置 优化n ...

  9. Nginx优化之服务性能优化

    优化Nginx服务的worker进程个数 修改nginx主配置文件 worker_processes 1; #指定了Nginx要开启的进程数,结尾数字就是进程个数 Nginx有Master进程和wor ...

随机推荐

  1. 软件工程 speedsnail 第二次冲刺6

    20150523 完成任务:碰撞墙壁,或线身体翻转: 遇到问题: 问题1 身体翻转与帧数冲突 解决1 运用循环嵌套解决 明日任务: 蜗牛碰到线后速度方向的调整

  2. 将List<T>转化成 DataTable--调整可空类型的转化错误

    加载表结构并保持成XML string cmdText = @"select * from kb_lable_temp where 1=2"; using (SqlConnecti ...

  3. echarts 各种细节问题

    1.最大值最小值异常 //如果数组中的数字是字符串的形式的话,echarts计算最大最小值不正确,故将String的数字转化成Number类型 //将包含字符串的数组转化为浮点数数组 function ...

  4. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

  5. PHP文件上传错误类型及说明

    从 PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码.该代码可以在文件上传时生成的文件数组中的 error 字段中被找到,也就是 $_FILES['userfile'][' ...

  6. PHP中英文字符串截取函数无乱码(mb_substr)和获取中英文字符串字数函数(mb_strlen)

    mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $length,要截取的字数 $encod ...

  7. 学习simple.data之进阶篇

    一.结果排序 -OrderBy(升序) -OrderByDescending(降序) db.Product.All().OrderByFactoryName(); db.Product.All().O ...

  8. C#之委托初步

    传说中的东西,今天兴趣来了,就研究了研究,把大概什么是委托,如何使用委托稍微梳理了一下. 1.什么是委托 首先,Class(类)是对事物的抽象,例如,哺乳动物都是胎生,那么你可以定义一个哺乳动物的基类 ...

  9. 实战Django:简易博客Part1

    舍得学习新技能的时候,通常不喜欢傻读书--捧着一本阐述该项技能的书籍,然后傻看,一路看下来,脑子里塞满了新的概念.知识点,头是越来越大,但技能却几乎没掌握半分. 多年来,舍得养成了用做实例来学习新技能 ...

  10. Factory Girl使用

    1.使用Rspec,详见http://www.cnblogs.com/fanxiaopeng/p/3563772.html 2.在gemfile中添加 #Gemfile group :developm ...