利用TCMalloc优化Nginx的性能

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

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

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

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 ./configuretcp

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

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服务器。

相关文章
相关标签/搜索