nginx性能優化調優之google-perftools

什麼是google-perftools?
google-perftools是google公司開發的一款針對 C/C++ 程序的性能分析開源工具,使用該工具能夠對 CPU 時間片、內存等系統資源的分配和使用進行分析
google-perftools包含四個工具,分別是:TCMalloc、heap-checker、heap-profiler和cpu-profiler,其中咱們本次須要的一個工具TCMalloc是google-perftools的其中一個工具,用於優化內存分配的效率和速度,幫助在高併發的狀況下很好的控制內存的使用java

運維爲何要使用google-perftools?
使用google開發的google-perftools優化nginx和mysql的內存分配效率和速度,幫助在高併發的狀況下控制內存的使用。可是,nginx的內存佔用實際上是不多的,一個進程佔用的內存大概只有12M左右,因此google-perftools對nginx的優化效果可能不太明顯mysql

什麼是TCMalloc工具?
上面已經說過TCMalloc是google-perftools的一個工具與標準的glibc庫的Malloc相比,TCMalloc庫在內存分配效率和速度上要高不少,這在很大程序上提升了服務器在高併發狀況下的性能,從而下降系統的負載如何爲Nginx添加TCMalloc庫支持,要安裝TCMalloc庫,須要安裝libunwind和gperftools兩個軟件包,libunwind庫爲基於64爲CPU操做系統的程序提供了基本函數調用鏈和函數調用函數寄存器功能,32位操做系統不須要安裝。nginx

經過上面的三連問咱們已經大體瞭解google-perftools是什麼玩意了,那麼下面咱們將進行如何安裝和使用c++

安裝編譯工具:
yum -y install gcc make
yum -y install gcc gcc-c++git

安裝libunwind:
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz
tar zxvf libunwind-0.99.tar.gz
cd libunwind-0.99/
CFLAGS=-fPIC ./configure --prefix=/usr
make CFLAGS=-fPIC
make CFLAGS=-fPIC installgithub

安裝google-perftools:
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.7/gperftools-2.7.tar.gz
tar zxvf gperftools-2.7.tar.gz
cd gperftools-2.7
./configure --enable-frame-pointers --enable-libunwind --with-tcmalloc-pagesize=32

./configure --enable-frame-pointers
make && make install
注:若是是64位系統,須要先安裝libunwind,再在configure gperftools的時候,添加--enable-frame-pointers參數sql

安裝nginx並添加參數
安裝nginx省略,若是nginx是在安裝google-perftools前已經安裝了,那麼須要考慮是否平滑升級及平滑重啓,平滑升級加入參數便可
例: ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-google_perftools_module服務器

上面雖然已經安裝好,可是仍是不可以使用,由於沒有在nginx配置文件中加入這個模塊併發

1.添加線程目錄
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
2.作軟鏈接或引用動態庫
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
3.修改nginx.conf配置文件,在pid行添加如下信息,表示開啓這個模塊
google_perftools_profiles /tmp/tcmalloc;運維

而後啓動或重啓nginx

驗證便可
nginx 44112 nobody 10w REG 8,4 0 1044489 /tmp/tcmalloc.44112
一個線程會有一個記錄文件,因爲我只開了一個線程,因此只有一個記錄文件

擴展:啓動nginx,發現缺乏libprofiler.so.0動態庫的支持/usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx: error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory這是由於perftools是經過Linux的LD_PRELOAD達到java應用程序運行時,當調用malloc時換用它的libtcmalloc.so查找系統下是否有libprofiler.so.0動態庫whereis libprofiler.so.0libprofiler.so: /usr/local/lib/libprofiler.so.0 /usr/local/lib/libprofiler.so因爲不在nginx程序查找的目錄下,因此須要建立軟連接評估缺乏的動態庫支持,可經過ldd /usr/local/nginx/sbin/nginx的方式,查看"not found"部分。ln -s /usr/local/lib/libprofiler.so.0.4.18 /lib64/libprofiler.so.0

相關文章
相關標籤/搜索