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