一、前言
1、使用google開發的google-perftools優化nginx的內存分配效率和速度,幫助在高並發的情況下控制內存的使用。
2、TCMalloc在內存的分配上效率和速度要比malloc高得多。但是nginx的內存占用其實是很少的,一個進程占用的內存大概只有12M左右,所有google-perftools對nginx的優化效果可能不太明顯。
二、安裝
1、下載並安裝google-perftools
# 從github上下載perftools工具包
# https://github.com/gperftools/gperftools
shell> cd /usr/local/src/
shell> wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.7/gperftools-2.7.tar.gz
# 注意:
# 1、如果是32位系統,在configure gperftools的時候,可以不添加--enable-frame-pointers參數。
# 2、如果是64位系統,需要先安裝libunwind,再在configure gperftools的時候,添加--enable-frame-pointers參數。
shell> yum install epel-release -y
shell> yum install libunwind-devel -y
shell> tar zxvf gperftools-2.7.tar.gz
shell> cd gperftools-2.7
shell> ./configure --enable-frame-pointers --enable-libunwind --with-tcmalloc-pagesize=32
shell> make && make install
2、使nginx支持google-perftools
# 重新編譯ngx,添加--with-google_perftools_module
# 簡單演示參數添加方法,詳細的nginx安裝過程,請參考《源碼安裝openresty》
shell> ./configure --with-google_perftools_module
shell> make && make install
3、配置nginx對google-perftools的支持
# 添加線程目錄
shell> mkdir /tmp/tcmalloc
shell> chmod 0777 /tmp/tcmalloc
# 修改nginx.conf,在pid行下面添加如下信息
google_perftools_profiles /tmp/tcmalloc;
# 重啟nginx
shell> /opt/openresty/nginx/sbin/nginx -s reload
# 驗證是否支持
shell> lsof -n |grep tcmalloc
nginx 1414 nobody 12w REG 252,1 0 1452011 /tmp/tcmalloc.1414
nginx 1415 nobody 14w REG 252,1 0 1452010 /tmp/tcmalloc.1415
# 備注:tcmalloc的記錄文件數量與nginx.conf中worker_processes的值有關
4、可能會遇到的問題
# 啟動nginx,發現缺少libprofiler.so.0動態庫的支持
shell> /opt/openresty/nginx/sbin/nginx
/opt/openresty/nginx/sbin/nginx: error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory
# 查找系統下是否有libprofiler.so.0動態庫
shell> whereis libprofiler.so.0
libprofiler.so: /usr/local/lib/libprofiler.so.0 /usr/local/lib/libprofiler.so
# 由於不在nginx程序查找的目錄下,所以需要創建軟鏈接
# 評估缺少的動態庫支持,可通過ldd /opt/openresty/nginx/sbin/nginx的方式,查看"not found"部分。
shell> ln -s /usr/local/lib/libprofiler.so.0.4.18 /lib64/libprofiler.so.0
至此,nginx下的google-perftools優化安裝完成。