利用TCMalloc优化Nginx的性能

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

要安装TCMalloc库,需要安装libunwind(32位操作系统不需要安装)和google-perftools两个软件包,libunwind库为基于64位CPU和操作系统的程序提供了基本函数调用链和函数调用寄存器功能。下面介绍利用TCMalloc优化Nginx的具体操作过程。

Google-perftools的项目:http://code.google.com/p/google-perftools/

1.安装libunwind

[root@htuidc src]# wget http://ftp.twaren.net/Unix/NonGNU//libunwind/libunwind-1.1.tar.gz

[root@htuidc libunwind-1.1]# CFLAGS=-fPIC ./configure

[root@htuidc libunwind-1.1]# make CFLAGS=-fPIC

2.安装gperftools

[root@htuidc src]# wget https://gperftools.googlecode.com/files/gperftools-2.1.tar.gz

[root@htuidc src]# tar zxvf gperftools-2.1.tar.gz

[root@htuidc src]# cd gperftools-2.1

[root@htuidc gperftools-2.1]# ./configure

[root@htuidc gperftools-2.1]# make && make install

至此,google-perftools安装完成。

3.重新编译Nginx

为了使Nginx支持google-perftools,需要在安装过程中添加“–with-google_perftools_module”选项重新编译Nginx。安装代码如下:

[root@htuidc nginx-1.5.4]# ./configure --with-google_perftools_module --with-http_stub_status_module --prefix=/usr/local/nginx1.5

[root@htuidc nginx-1.5.4]# make && make install

到这里Nginx安装完成。

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

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

[root@htuidc nginx-1.5.4]# mkdir /tmp/tcmalloc

[root@htuidc nginx-1.5.4]# chmod 0777 /tmp/tcmalloc

5.修改Nginx主配置文件

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

#pid logs/nginx.pid;

google_perftools_profiles /tmp/tcmalloc;

接着,重启Nginx即可完成google-perftools的加载。

[root@htuidc logs]# kill -Quit 16314

启动过程遇到两个错误:

1.[root@htuidc logs]# /usr/local/nginx1.5/sbin/nginx

/usr/local/nginx1.5/sbin/nginx: error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory

查看libprofiler.so.0库存在:

[root@htuidc logs]# whereis libprofiler.so.0

libprofiler.so: /usr/local/lib/libprofiler.so /usr/local/lib/libprofiler.so.0

因为我的是64位系统,所以创建一个软连接到 /lib64/和/usr/lib64/下就可以了,命令

[root@htuidc conf]# ln -s /usr/local/lib/libprofiler.so.0 /lib/

[root@htuidc conf]# ln -s /usr/local/lib/libprofiler.so.0 /usr/lib/

2.[root@htuidc conf]# /usr/local/nginx1.5/sbin/nginx

/usr/local/nginx1.5/sbin/nginx: error while loading shared libraries: libunwind.so.8: cannot open shared object file: No such file or directory

解决办法同上:

[root@htuidc conf]# ln /usr/local/lib/libunwind.so.8 /lib64

[root@htuidc conf]# ln /usr/local/lib/libunwind.so.8 /usr/lib64

正常启动:

[root@htuidc lib64]# /usr/local/nginx1.5/sbin/nginx

[root@htuidc lib64]# netstat -tnlpu|grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7154/nginx

验证google-perftools正常加载,可通过如下命令查看:

[root@htuidc lib64]# lsof -n|grep tcmalloc

nginx 7155 nobody 9w REG 253,0 0 393594 /tmp/tcmalloc.7155

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

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

最后,为MySQL添加TCMalloc库,提高MySQL在高并发情况下的性能

修改MySQL启动脚本(根据你的MySQL安装位置而定):

vi /usr/local/mysql/bin/mysqld_safe

在# executing mysqld_safe的下一行,加上:

export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

保存后退出,然后重启MySQL服务器。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-01-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Nginx+upstream针对后端服务器容错的运维笔记

熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一、nginx的upstr...

1.2K9
来自专栏施炯的IoT开发专栏

Windows 10 IoT Serials 6 - 如何修改IoTStartupOnBoot.cmd文件

    使用Windows 10 IoT Core系统的朋友应该会比较熟悉IoTStartupOnBoot.cmd文件,该文件是系统启动以后加载的批处理文件,一...

2588
来自专栏数据和云

浅谈TimesTen内存数据库的结构

作者介绍 ? 朱亮 云和恩墨技术专家,6年专职oracle dba生涯先后服务于保险、金融、电信、百货等客户 Oracle TimesTen In-Memor...

3928
来自专栏ytkah

thinkcmf安装教程与目录结构详解 快速上手版

  最近接了一个建站项目,要求用thinkcmf来搭建,ytkah在想php都大致一样吧,快速地下载安装包,可是!怎么安装呢?没看到安装指引文件或目录,查看了安...

5214
来自专栏应用案例

Hexo博客的安装部署及多电脑同步

Hexo安装教程很多,我这里尽可能的讲的细一些,把容易踩坑的地方以及后期多电脑同步所遇到的问题列出来,以便给自己及大家参考。本文主要讲解安装部署后源文件同步问题...

1.3K7
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第二十五天 Maven学习一【悟空教程】

解决方案:maven对项目生命周期进行定义,规范,开发人员和测试人员使用maven软件完成构建。

1403
来自专栏北京马哥教育

Python之包管理工具快速入门

学Python最简单的方法是什么?推荐阅读:30万年薪Python开发工程师成长魔法 在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序...

2915
来自专栏武培轩的专栏

当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

当我们在浏览器的地址栏输入 www.cnblogs.com ,然后回车,回车到看到页面到底发生了什么呢? 域名解析 --> 发起TCP的3次握手 --> 建立T...

3707
来自专栏hbbliyong

将Python脚本打包成可执行文件

本文主要就是介绍最后一种方式,.py和.pyc都比较简单,Python本身就可以搞定。将Python脚本打包成可执行文件有多种方式,本文重点介绍PyInstal...

2131
来自专栏奔跑的蛙牛技术博客

数据库编程

某些jdbc的jar文件自动注册为jar文件,不支持的话需要手动注册,可以在java程序注册,可以通过命令行注入

1173

扫码关注云+社区

领取腾讯云代金券