利用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服務器。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章